捕获组不能按预期方式工作

时间:2018-01-15 17:56:43

标签: javascript

var content="xx<br>xxxx <br>@yyy<span class='black'></span>yyy   yyy y ";
var rgx=/(.*(<br>))(.*<span class='black'><\/span>.*?\s)/gmi; 
var result = content.replace(rgx,"$3");
alert(result);

jsfiddle

我需要得到这个 - &gt; “@yyy<span class='black'></span>yyy”但相反,我得到了这个 - &gt; “@yyy<span class='black'></span>yyy yyy y”,为什么呢?

当我应用此正则表达式时 - &gt; /(.*(<br>))(.*<span class='black'><\/span>.*?\s)/这似乎按预期工作,match this - &gt; “xx<br>xxxx <br>@yyy<span class='black'></span>yyy”。

结果我只想得到这个“@yyy<span class='black'></span>yyy”。

1 个答案:

答案 0 :(得分:1)

var txt = "xx<br>xxxx <br>@yyy<span class='black'></span>yyy   yyy y ";
var res = (/<br>([^<]+<span class='black'><\/span>\S+\s)/gmi.exec(txt)||'')[1];
console.log(res); // "@yyy<span class='black'></span>yyy " // or undefined if not found

回答你的“为什么我在使用…yyy yyy y时<{1}} - 嗯,因为这正是….*?\s所做的: 获取任何字符零次或多次,包括最后一个空格:“yyy yyy y  “