2

我正在尝试 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但还没有运气。

感谢您的关注。

4

2 回答 2

1

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

从 MDNexec文档

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

[ ... ]

如果您的正则表达式使用“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]);
于 2012-09-08T19:03:43.963 回答
0

使用content.match代替regX.exec

于 2012-09-08T19:01:20.357 回答