例如,我有一個字符串<i class='highlight'>L</i>olopolo
。我需要將信l
更改爲<i class='highlight'>l</i>
。如何使正則表達式忽略標籤和內部的一切?正則表達式避免替換部分html標記
回答
試試這個:
var string = "<i class='highlight'>L</i>olopolo";
string = string.replace(/l(?![^>]+>)(?![^<]*<\/)/g, "<i class='highlight'>l</i>");
alert(string);
,如果你想有任意的文本,那麼你可以使用下面的代碼:
var text = "foo";
var re = new RegExp(text + '(?![^>]+>)(?![^<]*</)', 'g');
var string = "<i class='highlight'>foobar</i>foobarfoobar";
string = string.replace(re, "<i class='highlight'>" + text + "</i>");
alert(string);
感謝的人,這正是我想 –
document.getElementsByClassName("highlight")[0].innerHTML = "l";
不需要正則表達式。
或者,如果你想從上信改爲小寫
當然,你必須確保你可以這樣做之前呼籲的innerHTML toLowerCase(或其他方式)組成。
我需要包裝另一封信 –
好吧,我誤解了這個問題。 –
由於上面提到的使用正則表達式並不是最好的想法,所以下一個最好的事情就是遍歷文本節點並添加元素。
var charSplit = "l";
var elem = document.querySelector(".x");
var nodes = elem.childNodes;
for(var i=nodes.length-1;i>=0;i--){
var node = nodes[i];
if(node.nodeType === 3) { //this is a text node
var last = node;
var parts = node.nodeValue.split(charSplit); //split of the character we are supposed to match
node.nodeValue = parts[parts.length-1]; //set text node value to last index's value
for (var j=parts.length-2; j>=0;j--){ //loop backwards ingnoring the last index since we already put that text in the textode
var it = document.createElement("i"); //create the new element to add
it.className="highligt";
it.innerHTML = charSplit;
node.parentNode.insertBefore(it,last); //add it before the text node
var tx = document.createTextNode(parts[j]); //create new text node for text that becomes before the element
node.parentNode.insertBefore(tx,it);
last = tx;
}
}
}
<p class="x"><i class='highlight'>L</i>olopolo</p>
我建議這樣的事情,以最少的(和不那麼複雜)的正則表達式的使用。如果字符串最初是HTML的一部分 - >你能得到父母(S),並更改的textContent和innerHTML的:
tag=document.getElementsByTagName('p')[0]; /*just as example,can be anything else*/
str=tag.textContent;
reg=/(l)/gi;
tag.innerHTML=str.replace(reg,"<i class='highlight'>"+'$1'+"</i>");
演示:http://jsfiddle.net/LzbkhLx7/
附:解釋 - textContent會給你'純粹'的字符串/文本,沒有HTML標籤 - 然後你可以輕鬆地包裝每一個l/L的出現。
希望有沒有其他標籤,但在這種情況下,它工作正常。 :) – epascarello
是的,對於簡單的情況 - 應該工作。 :) – sinisake
- 1. 正則表達式避免htm標記
- 2. 正則表達式,以避免HTML標記和空值
- 3. 正則表達式:替換部分正則表達式匹配
- 4. 正則表達式替換HTML標籤
- 5. 替換部分正則表達式
- 6. Python - 替換部分正則表達式?
- 7. Perl正則表達式部分替換
- 8. HTML標記替換正則表達式不能正常工作
- 9. 正則表達式替換特定的標記HTML標籤內
- 10. 避免在正則表達式分組
- 11. 用php正則表達式替換html的標記
- 12. 使用正則表達式替換HTML標記內容
- 13. 如何在SQL Server中替換正則表達式HTML標記?
- 14. 使用正則表達式替換html字體標記
- 15. 正則表達式替換特定的XML/HTML標記在PHP
- 16. 正則表達式 - 替換HTML標記雙引號
- 17. 記事本++的正則表達式 - 替換正則表達式
- 18. 用正則表達式替換分頁標記
- 19. 記事本++正則表達式替換
- 20. 記事本正則表達式替換
- 21. 記事本+ +:正則表達式替換
- 22. 記事本++替換,正則表達式
- 23. 速記javascript正則表達式替換
- 24. 記事本++正則表達式替換
- 25. 用VBScript替換HTML正則表達式
- 26. sqlite的正則表達式替換HTML
- 27. 正則表達式替換c#html
- 28. 正則表達式匹配Html標記和內部Html模式
- 29. 正則表達式拆分和替換
- 30. 正則表達式替換SQL分組
不知道我理解你 - 你想改變大寫'L'爲小寫:'l'? – sinisake
不要使用正則表達式來解析HTML ...如果你這樣做,不要談論它堆棧溢出... http://stackoverflow.com/a/1732454/665261 –
我需要包裝另一封信 –