Вопрос JavaScript RegExp - PullRequest
       7

Вопрос JavaScript RegExp

0 голосов
/ 27 августа 2009

Можете ли вы, ребята, помочь мне понять это? У меня есть следующий фрагмент JavaScript:

pattern = new RegExp('^bla*a', 'i');
console.debug(pattern.exec('blatr'));

После того, как я запустил это, вывод будет ["бла"]. То, как я интерпретирую это регулярное выражение, таково: найдите мне строку, которая начинается с «бла» и заканчивается «а» с таким количеством символов между ними. В этом случае blatr не должен совпадать с регулярным выражением, но это так. Что я делаю не так?

Спасибо.

Ответы [ 3 ]

4 голосов
/ 27 августа 2009

«*» означает {0,} или «0 или более» предыдущего символа. То, что вы пытаетесь сделать, должно быть

^bla.*a$

edit : пропустил часть вопроса «заканчивается на« a »» ранее.

0 голосов
/ 27 августа 2009

Ваше регулярное выражение соответствует буквам bl в начале строки, за которыми следуют ноль или более a и затем один a (что эквивалентно одному или нескольким a) с возможными символами после этого. blatr соответствует этому.

Чтобы делать то, что вы хотите сделать (если я правильно понимаю, используйте:

'^bla.*a'

* означает повторение предыдущего символа ноль или более раз

0 голосов
/ 27 августа 2009

a * в вашем выражении соответствует предыдущему символу a ноль или более раз, а не строке bla . Вам нужно будет использовать скобки. Попробуйте это:

new RegExp('(^bla){1}.+a$', 'i');

РЕДАКТИРОВАТЬ: Нет смысла использовать + в выражении, которое соответствует началу строки. Кроме того, поскольку вы говорите, что хотите сопоставить любые символы между bla и a , вам необходимо использовать + после.

РЕДАКТИРОВАТЬ: Гм, кажется, ни один не нуждается в скобках, как показывают другие ответы. Примечание для себя: прекратить чрезмерную разработку ваших RegEx и проверить свои ответы, прежде чем публиковать их. : P Это нормально:

new RegExp('^bla.+a$', 'i');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...