2012-01-18 14 views
1

Можете ли вы помочь мне понять, что следующие средства регулярных выражений:Регулярное выражение в JS

(?:.*? rv:([\w.]+))? 

Так,

(?: //the pattern must be in a string, but doesn't return 
. //any Unicode character except newline 
* //zero or more times 
? //zero or one time (how is *? different from just *) 
rv: //just "rv:" apparently 
[\w //any digit, an underscore, or any Latin-1 letter character 
.] //...or any unicode character (are Latin-1 characters not Unicode?) 
..))? //all that zero or one time 

Это из "The Definitive Guide", и я ненавижу эту книгу. Некоторые примеры того, что делает и не соответствует регулярному выражению, были бы очень оценены.

ответ

2

регулярное выражение:

(?: # begin non capturing group 
.*? # any character, zero or more times, but peek and stop if the next char is 
     # a space (" "); then look for 
rv: # literal "rv:", followed by 
(  # begin capturing group 
[\w.] # any word character or a dot (the dot HAS NO special meaning in a character class), 
+  # once or more, 
)  # end capturing group 
)  # end non capturing group 
?  # zero or one time 

*?, что называется ленивый квантор, это заставляет движок регулярных выражений выглядывать следующий символ, прежде чем проглотить характер - она ​​используется, слишком часто и злоупотребления, и это это один случай: поскольку следующий символ является буквальным пространством, он должен быть заменен на [^ ]* (все, что НЕ является пробелом, ноль или более), что позволяет избежать всего обзора.

Окончательный. Правильно.

+0

Я нашел это объяснение '*?', Чтобы немного запутать. Это не вызовет никаких проблем, чтобы использовать его здесь, но я согласен, что '[^] *' лучше. Это яснее и эффективнее. Не путайте это с взглядом, который является чем-то совершенно другим. –

+0

@AdamBergmark Я знаю о lookahead/lookbehind, но факт остается фактом: если вы используете ленивый квантификатор, двигатель регулярных выражений должен «смотреть вперед» для следующего символа. Вероятно, я должен был сказать «заглянуть». На самом деле, я отредактирую и заменим. – fge

Смежные вопросы