用于从字符串中过滤关键字的正则表达式

时间:2012-09-08 18:58:25

标签: javascript regex

我正在尝试使用JS regX匹配某些值并将其替换为标记。所以这是我试过的代码。

content = '<p>[dfp:advertisement:leaderboard:750x90]</p>text here<p>[dfp:advertisement:box1:300x250]</p>';
var regX = /([a-zA-Z0-9]*):([0-9]*x[0-9]*)/g;
match = regX.exec(content);

好的,问题是这只会匹配第一个值,而不是第二个值。我已添加/g但尚无运气。

感谢您的光临。

2 个答案:

答案 0 :(得分:1)

exec的一次调用只会返回第一个匹配,即使是g标记也是如此。但是正则表达式将包含状态,以便随后使用相同正则表达式对exec的多次调用将返回以下匹配项。

来自MDN exec documentation

  

返回的数组将匹配的文本作为第一项,然后为匹配的每个捕获括号中的一个项目包含捕获的文本

     

[...]

     

如果正则表达式使用“g”标志,则可以多次使用exec方法在同一个字符串中查找连续匹配。

因此,此代码将alert来自您示例的前两个匹配项:

var content = '<p>[dfp:advertisement:leaderboard:750x90]</p>text here<p>[dfp:advertisement:box1:300x250]</p>';

var regX = /([a-zA-Z0-9]*):([0-9]*x[0-9]*)/g;
var match = regX.exec(content);
var match2 = regX.exec(content);

alert(match[0]);
alert(match2[0]);

正如其他人已经提到的那样,您可以在字符串上使用match来返回包含多个匹配项的数组。

因此,与上面的代码类似,此代码将alert来自您示例的前两个匹配项:

var content = '<p>[dfp:advertisement:leaderboard:750x90]</p>text here<p>[dfp:advertisement:box1:300x250]</p>';
var regX = /([a-zA-Z0-9]*):([0-9]*x[0-9]*)/g;

var match = content.match(regX);

alert(match[0]);
alert(match[1]);

答案 1 :(得分:0)

使用content.match代替regX.exec