2014-11-29 3 views
0

Я думаю, что это регулярное выражение должно работать:Почему мое регулярное выражение не работает внутри string.match()?

/(?s)\<strong\>.+\<\/strong\>/ 

Он проверяет и сопоставляет все между <strong> метками на regex101.com.

Однако он не соответствует ни одному, когда я использую его в методе регулярного выражения match().

var string = "text text <strong>some text</strong> text text"; 
 

 
var re = /(?s)\<strong\>.+\<\/strong\>/; 
 

 
alert(string.match(re));

Это должно насторожить <strong> теги и все между ними. Однако это не работает вообще.

Почему это и как я могу это исправить?

ответ

3

Ведущий (?s) является недопустимой группой в регулярном выражении JavaScript. В случае, если вы это попробовали, консоль браузера наверняка вызвала ошибку.

Вам не нужно бежать < или >, так это работает:

var re = /<strong>.+<\/strong>/; 

Обратите внимание, что если у вас есть несколько <strong> элементов в перспективе текста, регулярное выражение будет соответствовать все, от первого <strong> до последнего </strong>, потому что квант + равен жадным. Вы можете изменить это:

var re = /<strong>.+?<\/strong>/; 
+0

Когда ''? (? S) 'разрешено в RegExp? RegExp101.com объясняет, что это встроенный модификатор. , , –

+1

@Godisgood действует в некоторых средах, но JavaScript не поддерживает полный синтаксис PCRE. В этом инструменте regex101, который вы использовали, вы можете выбрать «JavaScript» в верхнем левом углу, а затем он покажет вам, что это тоже ошибка. – Pointy

+0

Ahhh. Спасибо огромное! –

0

Если вы попробуете его в браузере расслоения плотной консоли (Ctrl + Shift + K в светлячок) вы получите ошибку SyntaxError: недопустимое регулярное_выражение группа

Он работает без (s?) часть, вам не нужно это

var string = "text text <strong>some text</strong> text text"; 

var re = /\<strong\>.+\<\/strong\>/; 

alert(string.match(re)); 
1

Javascript не будет поддерживать (?s) модификатор DOTALL. Поэтому используйте [\S\s] вместо . в вашем регулярном выражении.

<strong>[\s\S]+<\/strong> // greedy match 

Для нежадным матча, вам нужно добавить квантор ? рядом с + символом.

<strong>[\s\S]+?<\/strong> 

[\s\S]+ матчи также символы новой строки, но .+ не будет соответствовать разрывы строк.

> var string = "text text <strong>some text</strong> text text"; 
undefined 
> var re = /<strong>[\s\S]+?<\/strong>/; 
undefined 
> console.log() 

undefined 
> console.log(string.match(re)); 
[ '<strong>some text</strong>', 
    index: 10, 
    input: 'text text <strong>some text</strong> text text' ] 
Смежные вопросы