如何將字符串模式中的數字的所有實例替換爲該數字加上偏移量。將Javascript字符串替換爲正則表達式變量操作
說我要取代這個數字加上偏移
所有的HTML標籤strRegEx = /<ol start="(\d+)">/gi;
strContent = strContent.replace(strRegEx, function() {
/* return $1 + numOffset; */
});
如何將字符串模式中的數字的所有實例替換爲該數字加上偏移量。將Javascript字符串替換爲正則表達式變量操作
說我要取代這個數字加上偏移
所有的HTML標籤strRegEx = /<ol start="(\d+)">/gi;
strContent = strContent.replace(strRegEx, function() {
/* return $1 + numOffset; */
});
@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);
}
}
}
替換功能顯然不允許,這樣做你需要什麼需要多一點的努力
執行(與.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與正則表達式一般一個壞主意。但是,如果您只是解析了一段事先知道確切結構的內容,我沒有看到任何特定問題......
您不想用正則表達式搜索和替換HTML。使用解析器來操作HTML。與瀏覽器集成的Javascript可以直接訪問非常強大的HTTP解析器(瀏覽器本身),因此正確使用它基本上是免費的。 – Tomalak