2012-06-11 54 views
0

我正在嘗試在聊天的表情圖標功能中實現單詞邊界。但由於某種原因,我似乎無法使字邊界起作用。我對正則表達式很陌生。字符邊界對符號字符有效嗎?

所以,當我做的:

var reg = /\b\Hi\b/gi; 
var str = 'HiHiHi Hi HiHiHi Hi'; 
alert(str.replace(reg, '')); 

出現這種情況:Jsfiddle

它實際上工作正常,並不會刪除那些2嗨的那些獨自站立。

但是,當我改變了reg到逃脫的笑臉,然後更改字符串:

var reg = /\b\:\)\b/gi; 
var str = 'HiHi:) :) HiHiHi :)'; 
alert(str.replace(reg, '')); 

出現這種情況: Jsfiddle

這是行不通的。字符串保持不變。字符邊界不能用於符號嗎?如果是這樣,Facebook如何進行聊天?

+0

請加你**做一些例子**和**不**想匹配。 –

+0

你是什麼意思「Facebook如何做...?」 –

回答

0

由於\b不會在這種情況下工作,你可以使用:

var re = /(\s|^):\)(?!\S)/g; 
var str = 'HiHi:) :) HiHiHi :)'; 
alert(str.replace(re, '$1')); 

它的工作原理類似於空間邊界。

您可以添加多個表情給它,像這樣:

/(\s|^)(?::\)|:\(|:\||:\]|:\[)(?!\S)/g; 
+0

@ Shawn31313,請參閱更新。不要忘記逃離元字符。 – Qtax

+0

好的。現在,我將如何在新的RegExp()javascript對象中添加上述reg? – Shawn31313

+0

@ Shawn31313,修復語法錯誤,並在引用時雙反斜槓:http://jsfiddle.net/Bzqu8/5/ – Qtax

2

字邊界\b代表單詞字符\w之間和非單詞字符\W(一切)一個零寬度邊界(在JavaScript,[A-Za-z_])。

因此,不會有2個表情符號或當表情是由空格,標點符號等

包圍最簡單的正則表達式。將/[:;]-?[()]/gi,它支持表情)和frownies (具有可選之間的邊界破折號和眼睛:或眨眼;

編輯:

這將需要空格或字符串的開頭(如捕獲組,因爲JavaScript不支持查找屁股),然後使用上述正則表達式,那麼它必須接着是字符串或空白的結尾。

var reg = /(\s|^)[:;]-?[()](?:\s|$)/gi; 
var str = 'HiHi:) :) HiHiHi :)'; 
alert(str.replace(reg, '$1')); 

應該在這些情況下更換::-)cool :(not!

不應該在這些情況下更換:Digits:(0,1,2,3)hi :(.

+1

或者更簡單:'\ w'和'\ W'。儘管Javascript只使用ASCII,但通常很多正則表達式引擎對'\ w'的類有很多。 – Joey

+0

好點。我結合了你的建議。 –

+0

因此,我無法爲此使用單詞邊界:/ – Shawn31313