如何将字符串模式中的所有数字实例替换为该数字加上偏移量。
假设我想用该数字替换所有HTML标签加上偏移量
strRegEx = /<ol start="(\d+)">/gi;
strContent = strContent.replace(strRegEx, function() {
/* return $1 + numOffset; */
});
答案 0 :(得分:0)
@Tomalak是对的,你不应该在HTML中使用正则表达式,你应该使用broswer自己的HTML DOM或XML解析器。
例如,如果该标记还分配了另一个属性(例如类),则正则表达式将不匹配它
<ol start="#" >
不等于<ol class="foo" start="#">
没有办法使用正则表达式,你应该通过DOM找到你正在寻找的元素,获取它的属性,检查它们是否匹配,然后从那里开始。
function replaceWithOffset(var offset) {
var elements = document.getElementsByTagName("ol");
for(var i = 0; i < elements.length; i++) {
if(elements[i].hasAttribute("start")) {
elements[i].setAttribute("start", parseInt(elements[i].getAttribute("start")) + offset);
}
}
}
答案 1 :(得分:-1)
替换功能显然不允许这样做,所以做你需要的东西需要更多的努力
执行(使用.exec())多次全局正则表达式将返回后续结果,直到没有更多匹配可用并返回null。您可以在while循环中使用它,然后使用返回的匹配来对原始输入进行子串并手动执行修改
var strContent = "<ol start=\"1\"><ol start=\"2\"><ol start=\"3\"><ol start=\"4\">"
var strRegEx = /<ol start="(\d+)">/g;
var match = null
while (match = strRegEx.exec(strContent)) {
var tag = match[0]
var value = match[1]
var rightMark = match.index + tag.length - 2
var leftMark = rightMark - value.length
strContent = strContent.substr(0, leftMark) + (1 + +value) + strContent.substr(rightMark)
}
console.log(strContent)
&#13;
注意:正如@tomalak所说,使用正则表达式解析HTML通常是一个坏主意。但是,如果你只是事先解析了一段你知道精确结构的内容,我就不会看到任何特定的问题......