2016-11-25 96 views
0

如何將字符串模式中的數字的所有實例替換爲該數字加上偏移量。將Javascript字符串替換爲正則表達式變量操作

說我要取代這個數字加上偏移

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

您不想用正則表達式搜索和替換HTML。使用解析器來操作HTML。與瀏覽器集成的Javascript可以直接訪問非常強大的HTTP解析器(瀏覽器本身),因此正確使用它基本上是免費的。 – Tomalak

回答

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

替換功能顯然不允許,這樣做你需要什麼需要多一點的努力

執行(與.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)

注:爲@tomalak說,解析HTML與正則表達式一般一個壞主意。但是,如果您只是解析了一段事先知道確切結構的內容,我沒有看到任何特定問題......