2015-06-21 47 views
0

http://jsfiddle.net/bxeLyneu/1/正則表達式Expressions有關表情

function custom() { 
var str = document.getElementById('original').innerHTML; 
var replacement = str.replace(/\B:poop:\B/g,'REPLACED'); 
document.getElementById('replaced').innerHTML = replacement; 
} 
custom() 

是=:船尾:船尾:應以 「改爲」 否=更換不應該被取代。換句話說,保持不變。

4號,5號,6號似乎不遵循規定。我知道爲什麼,但我不知道如何將多個表達式合併爲一個表達式。 我已經嘗試了很多其他人,但我無法讓他們以我想要的方式工作。賠率對我不利。

是的,這與Facebook聊天室中的表情符號非常相似。

新問題:

enter image description here

http://jsfiddle.net/xaekh8op/13/

/(^|\s):bin:(\s|$)/gm 

這是無法掃描並更換一個在中間。 我該如何解決這個問題?

+0

'/ \ s:poop:\ s/g'符合預期的例子。 –

回答

4

\B的意思是「任何位置不在單詞邊界」,而\s的意思是「空白」。基於你給出的例子,下面的代碼完美地工作。

function custom() { 
    var str = document.getElementById('original').innerHTML; 
    var replacement = str.replace(/([\s>]|^):poop:(?=[\s<]|$)/gm,'$1REPLACED'); 
    document.getElementById('replaced').innerHTML = replacement; 
} 
custom() 

http://jsfiddle.net/xaekh8op/15/

說明:

正則表達式([\s>]|^):poop:(?=[\s<]|$)代表以下:

Regular expression visualization(在Debuggex創建的圖像)

通過拾取的\s一個和>(或使用^表示起始行),並將其分組爲組1,我們可以稍後使用它。同樣適用於:poop:\s<或行尾$)之後。但是,第二次,它是使用前瞻((?= ...)是語法)完成的,它檢查[\s<]|$部分之後是否存在,但它不會在替換中消耗它。 <>負責處理可能位於:poop:旁邊的任何HTML標記。替換字符串$1REPLACED中的$1將第一個組放回,從而僅將:poop:替換爲REPLACED。第二個「小組」只是一個預見,因此不需要被替換回來。

有關單詞邊界的更多信息,你可以參考http://www.regular-expressions.info/wordboundaries.html它說:

有跡象表明,有資格作爲單詞邊界的三個不同位置:

  • 字符串中的第一個字符之前,如果第一個字符是單詞字符。
  • 在字符串中的最後一個字符後面,如果最後一個字符是單詞字符。
  • 字符串中的兩個字符之間,其中一個是單詞字符,另一個不是單詞字符。
+0

如果空間不在前面和後面都存在,該怎麼辦?這不會起作用。 – NubPro

+1

@Jahid,修復了使用捕獲組的答案。 @NubPro,修正了使用'>'和'<'測試的答案。 請檢查添加額外測試案例的新演示,演示代碼。 –

+0

感謝您的幫助,但我偶然發現了這個:http://jsfiddle.net/xaekh8op/6/ – NubPro