我认为这个正则表达式应该有效:
/(?s)\<strong\>.+\<\/strong\>/
它验证并匹配regex101.com上<strong>
标记之间的所有内容。
但是,当我在正则表达式match()
方法中使用它时,它并不匹配任何内容。
var string = "text text <strong>some text</strong> text text";
var re = /(?s)\<strong\>.+\<\/strong\>/;
alert(string.match(re));
&#13;
这应警告<strong>
标签及其间的所有内容。但是,它根本不起作用。
为什么会这样,我该如何解决?
答案 0 :(得分:3)
前导(?s)
是JavaScript正则表达式中的无效组。您尝试使用浏览器控制台时肯定会产生错误。
您不需要逃离<
或>
,因此可行:
var re = /<strong>.+<\/strong>/;
请注意,如果您在一系列文字中有多个<strong>
元素,那么您的正则表达式将匹配从第一个<strong>
到最后一个</strong>
的所有内容,因为{{1}量词是贪心。你可以改变:
+
答案 1 :(得分: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' ]
答案 2 :(得分:0)
如果你在浏览器js控制台中尝试(在Firefox中按Ctrl + Shift + K),你会收到错误 SyntaxError:无效的regexp组
没有(?s)部分,你不需要它
var string = "text text <strong>some text</strong> text text";
var re = /\<strong\>.+\<\/strong\>/;
alert(string.match(re));