为什么我的正则表达式在string.match()中不起作用?

时间:2014-11-29 15:18:43

标签: javascript regex text-parsing

我认为这个正则表达式应该有效:

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

它验证并匹配regex101.com上<strong>标记之间的所有内容。

但是,当我在正则表达式match()方法中使用它时,它并不匹配任何内容。

&#13;
&#13;
var string = "text text <strong>some text</strong> text text";

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

alert(string.match(re));
&#13;
&#13;
&#13;

这应警告<strong>标签及其间的所有内容。但是,它根本不起作用。

为什么会这样,我该如何解决?

3 个答案:

答案 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));