JavaScript - работа с моим регулярным выражением

javascript regex replace expression

38 просмотра

2 ответа

У меня есть эти 2 выражения:

1: [^a-zA-Z0-9]

2: [^a-zA-Z]

Первый должен использоваться всякий раз, когда моя строка начинается с данных, а второй - если нет. Однако мне нужно это встроенное в мое регулярное выражение (поэтому использование .slice (0, 5) == "data-" не подходит для этой ситуации).

Можно ли сделать это встроенным (так, просто используя 1 регулярное выражение)? Или мне сначала нужно проверить (если строка начинается с data- ), а затем использовать правильное выражение?

Некоторые примеры:

data-attribute@!#!19  => data-attribute19
data-attribute17      => data-attribute17
attribute19           => attribute
attribute1@!#!@#183   => attribute
Автор: Bilal075_ Источник Размещён: 08.11.2019 11:16

Ответы (2)


1 плюс

Решение

Вы можете сделать что-то вроде этого:

/^(data-[a-zA-Z0-9]+).+?(\d*)$|^([a-zA-Z]+).+$/

Который будет соответствовать тому, что вы хотите, а затем вернуть результаты в одной или двух группах захвата (в зависимости от того, какой вариант он соответствует).

Сломать его

Идя слева направо:

Символ ^означает «начало строки» - в данном случае начало одной строки.

Скобки ()указывают группу захвата - некоторую подстроку, которую вы хотите захватить и вывести отдельно от вашей основной строки соответствия.

data- обозначает буквальную строку «data-» с дефисом в конце.

[a-zA-Z0-9]+ класс персонажа, повторяется один или несколько раз.

.+?является одним или несколькими любыми символами, сопоставляемыми лениво - это означает, что он «откажется» от части своего соответствия, чтобы позволить следующему токену максимально соответствовать.

\d*означает ноль или более цифр (эквивалентно [0-9]*).

Символ $означает «соответствовать концу строки» (опять же, в данном случае, конец вашей строки).

Символ |означает «альтернативный» - в основном, он будет соответствовать либо шаблону слева, либо шаблону справа, позволяя этому регулярному выражению соответствовать любой из ваших двух строк.

Автор: Sebastian Lenartowicz Размещён: 20.08.2016 12:23

0 плюса

str.replace('/[@!#]/', '')
str.match('/^data-(.+)$/') // Contains true or false

Это должно сделать свое дело.

Сначала мы удаляем все специальные символы (вы можете добавить свои.)

[abc]класс символов, который говорит JavaScript: соответствует любому символу в квадратных скобках

Затем мы проверяем, совпадает ли это с data-attribute

^и $соответствует началу и концу ввода (оно не может начинаться или заканчиваться пробелом или любым другим символом)

()ловит персонажей внутри них. Вы можете получить доступ к тому, что было поймано сRegExp.$1-9

. означает любые символы, кроме ограничителей строки.

+является квантификатором на 1 раз или более . Это так же, как {1,}.

Вам просто нужно проверить, совпадает ли это с вводом. Если это соответствует, атрибут начинается сdata-

Автор: Dario Размещён: 20.08.2016 12:27
Вопросы из категории :
32x32