Путаница в JavaScript RegExp? Квантор - PullRequest
0 голосов
/ 06 мая 2010

Могу ли я узнать причину получения следующего кода: 1,10,10? Почему не так: 10, 10?

<script type="text/javascript">
var str="1, 100 or 1000?";
var patt1=/10?/g; 
document.write(str.match(patt1));
</script> 

Ответы [ 5 ]

4 голосов
/ 06 мая 2010

Поскольку ? - это специальный символ в регулярном выражении, оператор делает один элемент перед его необязательным. Таким образом, /10?/ соответствует 1, за которым, возможно, следует 0, поэтому он может соответствовать просто 1, или 10 в 100, или 10 в 1000.

1 голос
/ 06 мая 2010

? является метасимволом, означающим ноль или более совпадений.

Чтобы соответствовать '?', Сбегите.

var pat = /10\?/g;
1 голос
/ 06 мая 2010

это удобный шпаргалка для выражений reg .

бит, который вам нужен, находится посередине:

  • 0 или более совпадений = *
  • 0 или 1 совпадений =?
  • 1 или более совпадений = +

вы можете увидеть различные эффекты, которые они имеют, используя ваш код, здесь

0 голосов
/ 06 мая 2010

Исправлено:

/10+\?/g
0 голосов
/ 06 мая 2010

Похоже, вы путаете приоритет

/10?/

Это относится ? только к 0. Если вы хотите, чтобы 10 был изменен на ?, вам нужно сгруппировать его:

/(10)?/

Или, если вам не нужно захватывать:

/(?:10)?/

Аналогично,

/ab+/

Совпадения abbbbbb. Если вы хотите соответствовать ababab, вам нужно будет написать:

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