我正在尝试使用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
但尚无运气。
感谢您的光临。
答案 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