簡體   English   中英

用正則表達式變量操作替換Javascript字符串

[英]Javascript string replace with regex variable manipulation

如何用該數字加上偏移量替換字符串模式中所有數字實例。

假設我想用該數字加上偏移量替換所有HTML標記

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

@Tomalak是正確的,您不應真正將正則表達式與HTML一起使用,而應使用瀏覽器自己的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);
       }
    }
}

替換功能顯然不允許這樣做,因此您需要做的事情需要更多的精力

多次執行(使用.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通常是一個壞主意。 但是,如果您只解析一部分內容,而您事先已經知道這些內容的確切結構,那么我看不到任何特定的問題...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM