Регулярное выражение Javascript (соответствует символу ":") - PullRequest
0 голосов
/ 10 января 2019

Как получить весь текст, следующий за символом ":"?

Я пробовал:

'prop:bool*'.match(/:(.[a-z0-9]+)/ig)

Но возвращается [":bool"], а не ["bool"].

Обновление:

Мне нужно использовать это внутри следующего выражения:

'prop:bool*'.match(/^[a-z0-9]+|:.[a-z0-9]+|\*/ig);
Так что результат становится:
["prop", "bool", "*"]

Ответы [ 4 ]

0 голосов
/ 10 января 2019

Это не просто решение регулярных выражений, поскольку оно использует объект String с его методом substring () следующим образом:

var str = 'prop:bool*';
var match = str.match(/:(.[a-z0-9]+)/ig).pop().substring(1,str.length);
console.log(match);

При успешном совпадении массив из одного элемента будет содержать значение :bool. Для этого результата просто нужно извлечь часть bool. Таким образом, элемент использует метод pop () для возврата строкового значения. Строка, в свою очередь, использует метод substring (), чтобы обойти ':' и извлечь нужную часть, а именно bool.

var [a,b,c] = 'prop:bool*'.match(/^([a-z0-9]+)|:(.[a-z0-9]+)|(\*)/ig);

console.log(a,b.substring(1,b.length),c);

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

0 голосов
/ 10 января 2019

Вы можете решить эту проблему, выполнив положительное действие lookbehind .

'prop:bool*'.match(/^[a-z0-9]+|(?<=:).[a-z0-9]+|\*/ig)

Позитивный вид сзади - это часть регулярного выражения (?<=:), в которой будет указано правило must follow ':'.

Результат должен быть здесь ["prop", "bool", "*"].

Edit:

Исходные требования были несколько изменены оригинальным постером, чтобы вернуть три группы ответов. Мой оригинальный код, возвращающий один ответ, был следующим: 'prop:bool*'.match(/(?<=:).[a-z0-9]+/ig)

0 голосов
/ 10 января 2019

Если вся ваша строка имеет форму, которую вы показываете, вы можете просто использовать регулярное выражение с группами захвата, чтобы получить каждый кусок:

console.log('prop:bool*'.match(/^([a-z0-9]+):(.[a-z0-9]+)(\*)/i).slice(1));
0 голосов
/ 10 января 2019

Вы можете просто сделать:

'prop:bool*'.match(/:(.[a-z0-9]+)/)[1]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...