2012-06-19 41 views
2

這是我的代碼:JavaScript的正則表達式字邊界問題

var boo = new RegExp("\\Bis\\B","gi"); 
var result = boo.exec("this AisA stackoverflow"); 
document.write(result);​ 

的結果是:「是」,但我想要的功能EXEC返回使用 非單詞邊界\ B中的整場比賽,即AISA。我知道我可以使用一個模式,例如。+ is。+來返回AisA,但是 我想知道如何用非字邊界做同樣的事情。

+0

展望未來我猜... – gdoron

+1

不要對靜態字符串使用'new RegExp'; JavaScript具有更快,更好,更不易出錯的字面值。例如,你可以寫成'var boo =/\ Bis \ B/gi;'。 – Ryan

回答

3

試試這個:

/.\Bis\B./ 

這將檢查無邊界,同時還採取與.該字符。

+0

這也匹配「abcisdefg」中的「cisd」。根據他的應用程序,/ \ w *是\ w * /可能更合適。 – Wug

0

這可能是你之後?

\S*\Bis\B\S* 

由於邊界不符合字符,但只檢查一個條件,你必須使用別的東西來獲取字符。

0

詞邊界是所謂的零寬度匹配,這意味着它們匹配條件而不是字符。例如,在正則表達式「\ bw」中,「\ b」會測試在表達式中的位置之前或之後是否有空格。它沒有捕獲任何東西。

如果要捕獲單詞字符,請嘗試使用\ w。

參見:http://www.regexguru.com/2008/04/watch-out-for-zero-length-matches/

0

要匹配包含一個字 '是':

/\b\w*is\w*/gi 

最後\ b不是必要的,因爲這是洛杉磯的一部分(\ W *)。