2015-09-16 52 views
-2

我遇到以下問題。我想用Javascript中的以下字符串替換單詞「snippet」Javascript RegExp lookbehind

<p>This is a <span class="snippet-expansion">snippet<span><p> 

但我想保留class =「snippet-expansion」。

另一種情況可能是

<p>This is a snippet within a text<p> 

在第二種情況下的結果應該是

<p>This is a <span class="highlight-searchterm">snippet</span> within a text<p> 

通常情況下,我會做到這一點與在正則表達式的回顧後,但這些都不是可用的JavaScript。

有人可以幫我嗎?

+0

jQuery的解決方案(可在JS寫)'$( '片段 - 擴展 ')。文本()代替(' 片斷', '我的新文本')' – Johan

+0

謝謝,但我不夠清楚。我更新了這個問題。 – Rakin

+0

所以你想用span來包裝一個詞? – Johan

回答

-1

作品具有前瞻:

/snippet(?!-expansion)/ 

REF: https://regex101.com/r/lH5vA3/1

+0

要清楚。在我的應用程序中,用戶在文本框中輸入一些文本,例如「sni」。我在數據庫中搜索文本中包含sni的所有條目,並將它們傳回到前端。所以你的情況不適合讓我們說「sni」這個詞。 – Rakin

+0

對於你想要做什麼,我仍然有點困惑,但是如果你調整了它的匹配字符,前瞻應該仍然可以工作。 's(?!\ w | \ s |「| - | =)'或'sni(?!\ w | \ s |」| - | =)'https://regex101.com/r/lH5vA3/3 – dstuessy

-1

嘗試這種表達

var str='<p>This is a <span class="snippet-expansion">snippet<span><p>'; 

str.replace(/snippet.*?(\W|\s)+/g,function (val){ if(val.trim().match(/\W+/g) && !val.match(/</g)) return val; return val.replace(/snippet/g,'') }); 
-1

尋找一個結束標記>和開放標籤<應爲工作之間的文本你的情況。

var str = '<p>This is a <span class="snippet-expansion">snippet<span><p>'; 
 
var rep = str.replace(/(>[^<>]*)snippet([^<>]*<)/, "$1foo$2"); 
 
document.getElementById("t").value = rep; 
 
document.getElementById("t").value += "\n\n"; 
 

 
var str1 = '<p>This is a snippet within a text<p>'; 
 
var rep1 = str1.replace(/(>[^<>]*)snippet([^<>]*<)/, "$1foo$2"); 
 
document.getElementById("t").value += rep1; 
 
document.getElementById("t").value += "\n\n"; 
 

 
var str2 = '<p>This is a <span class="highlight-searchterm">snippet</span> within a text<p>'; 
 
var rep2 = str2.replace(/(>[^<>]*)snippet([^<>]*<)/, "$1foo$2"); 
 
document.getElementById("t").value += rep2;
<textarea id="t" style="width: 500px; height: 200px;"></textarea>