Javascript字符串替换为正则表达式变量操作

时间:2016-11-25 16:02:28

标签: javascript regex

如何将字符串模式中的所有数字实例替换为该数字加上偏移量。

假设我想用该数字替换所有HTML标签加上偏移量

strRegEx = /<ol start="(\d+)">/gi;
strContent = strContent.replace(strRegEx, function() {
                                                  /* return $1 + numOffset; */
                                                   });

2 个答案:

答案 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循环中使用它,然后使用返回的匹配来对原始输入进行子串并手动执行修改

&#13;
&#13;
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;
&#13;
&#13;

注意:正如@tomalak所说,使用正则表达式解析HTML通常是一个坏主意。但是,如果你只是事先解析了一段你知道精确结构的内容,我就不会看到任何特定的问题......

相关问题