回答
不完全是這樣,但是如果您處於這種修補程序中,我想您會對快速而骯髒的解決方案感到滿意:如果下一個出現的角度支架不是關閉角度支架,請找到/
。
result = subject.replace(/\/(?![^<>]*>)/g, "/");
當然,這是極脆的 - 例如,它根本不會關心註釋,字符串等(但,這將是非常困難的正則表達式來退出這個功能)。
+1良好的誠實的答案。 – Paulpro
謝謝,我認爲可能爲這個應用程序工作;我將嘗試它 –
您可以測試:
html ='<a href="/sdfsdf/SD/sdfsf">toto/tata</a>';
html = html.replace(/(<[^>]+>)|\//g,
function (match, p1) { return (p1)?match:"/"; });
console.log (html);
這樣做是爲了捕獲所有的HTML標籤(和自行替換)試圖匹配斜線之前。然後回調函數測試第一個捕獲組是否存在並返回完全匹配或替換。
您可以改善這種情況的安全應對風格和腳本內容,就像這樣:
html = html.replace(/(<s(tyle|cript)\b[\s\S]*?<\/s\2>|<[^>]+>)|\//gi,
function (match, p1, p2) { return (p1)?match:"/"; });
這將取代腳本和樣式標記中的'/',這可能會導致問題 –
@DMoses:現在,它好嗎? –
是的,你可能也想跳過以下內容:'<![CDATA [...]]>'和''請參閱http://www.whatwg.org/specs/web-apps/current-work/multipage/tokenization.html#tag-open - 如何解析HTML5。 –
這裏是一個很好的例子。第一次打google:http://james.padolsey.com/javascript/find-and-replace-text-with-javascript/
基本思想是遍歷DOM中的所有節點並替換文本節點中的文本。另外,不要替換腳本,樣式,元數據類型標籤中的節點中的任何文本。雖然你可以用一個大的正則表達式來做到這一點,但是如果在每個瀏覽器中都內置了一個dom解析器,那麼在正則表達式中實現dom解析器就沒有什麼意義了。
function findAndReplace(searchText, replacement, searchNode) {
if (!searchText || typeof replacement === 'undefined') {
// Throw error here if you want...
return;
}
var regex = typeof searchText === 'string' ?
new RegExp(searchText, 'g') : searchText,
childNodes = (searchNode || document.body).childNodes,
cnLength = childNodes.length,
excludes = 'html,head,style,title,link,meta,script,object,iframe';
while (cnLength--) {
var currentNode = childNodes[cnLength];
if (currentNode.nodeType === 1 &&
(excludes + ',').indexOf(currentNode.nodeName.toLowerCase() + ',') === -1) {
arguments.callee(searchText, replacement, currentNode);
}
if (currentNode.nodeType !== 3 || !regex.test(currentNode.data)) {
continue;
}
var parent = currentNode.parentNode,
frag = (function(){
var html = currentNode.data.replace(regex, replacement),
wrap = document.createElement('div'),
frag = document.createDocumentFragment();
wrap.innerHTML = html;
while (wrap.firstChild) {
frag.appendChild(wrap.firstChild);
}
return frag;
})();
parent.insertBefore(frag, currentNode);
parent.removeChild(currentNode);
}
}
然後用它
findAndReplace('\\/', '/');
- 1. 正則表達式<>
- 2. 正則表達式(){} [] <>
- 3. 正則表達式解釋:(?> [^ <>] +)
- 4. 的Javascript正則表達式替換文本DIV和< >
- 5. 結合正則表達式<br/><img/><p/>
- 6. 正則表達式Javascript數字逗號分隔| > | > = <=
- 7. 自定義正則表達式= $〜#№\; < >%/
- 8. Perl正則表達式[] for <>
- 9. [^ <>]的正則表達式
- 10. 正則表達式http:// ... <a>
- 11. 正則表達式<.5 to > 15.900
- 12. 正則表達式< >之間
- 13. 正則表達式替換<>
- 14. 在PHP中的正則表達式/ find「<a></a>」
- 15. C#正則表達式模式<id> ....</id>
- 16. 的Javascript正則表達式等同於「(ΔP<name> ...)」在python
- 17. JavaScript和正則表達式
- 18. 正則表達式和Javascript
- 19. 正則表達式的表達,去除<div class...</div>
- 20. javascript正則表達式:`foo` - > ** foo **?
- 21. 正則表達式爲正則表達式的字符串<somestring>路徑
- 22. 特定字符串格式正則表達式<><><>
- 23. \ b和\>,\ <在正則表達式中有什麼區別?
- 24. 在tar文件<code>b.tar</code>替換sed和正則表達式
- 25. /<.> /和/ <[.]> /在正則表達式中有什麼區別
- 26. 正則表達式PHP - 查找<div></div>標籤
- 27. 獲取最後的</td></tr>正則表達式?
- 28. 正則表達式匹配<Key> .... <Value>圖案
- 29. 正則表達式爲<!--{tag}-->或<! - {tag(string | integer | etc)} - >?
- 30. 正則表達式讀取<title>與</title>
將這項工作? –
重複的問題http://stackoverflow.com/questions/4455606/how-to-find-text-and-replace-using-jquery –
@DMoses我不認爲這是一個騙局。 – Charlie