2010-08-17 50 views
11

在Javascript中,我希望能夠匹配以特定短語開頭的字符串。但是,我希望它能夠匹配短語中任何單詞的開頭,而不僅僅是短語的開頭。正則表達式匹配字符串中多個單詞的開始

例如:

短語: 「這是最好的」

需要匹配: 「TH」

結果:匹配Th和次

編輯:\ B工作大然而它提出了另一個問題:

它也將匹配外國人後的字符。例如,如果我的字符串是「Männ」,並且我搜索「n」,它會匹配n之後的任何想法?

回答

23
"This is the best moth".match(/\bth/gi); 

或具有可變你的字符串

var string = "This is the best moth"; 
alert(string.match(/\bth/gi)); 

\b在一個正則表達式就是一個字邊界,\bth只會匹配th,在一個單詞的開頭。

gi是一個全球性的匹配(查找所有實例)和不區分大小寫

(我在那裏扔moth作爲一個提醒,以檢查它是不匹配的)

jsFiddle example


編輯:

所以,一個bove只返回你匹配的部分(th)。如果你想返回整個單詞,你必須匹配整個單詞。

這是事情變得棘手的地方。首先,沒有HTML實體信:

string.match(/\bth[^\b]*?\b/gi); 

Example

爲了配合整個字從字邊界\b搶去th其次是非字邊界[^\b],直到你到另一個詞邊界\b*表示您想要查找0個或更多以前的(非單詞邊界)?標記表示這是一個懶惰匹配。換句話說,它不會擴大到儘可能大,但在第一次機會時停下來。

如果您有像ä(ä)這樣的HTML實體字符,事情變得非常複雜,您必須使用空格或空格以及可能位於字邊界的一組定義字符。

string.match(/\sth[^\s]*|^th[^\s]*/gi); 

Example with HTML entities.

因爲我們不使用單詞邊界,我們必須採取的字符串的開頭分開(|^)的照顧。

上面將捕捉單詞開頭的空格。使用\b不會捕獲空白區域,因爲\b沒有寬度。

+4

+1感謝您向我介紹\ b :) – 2010-08-17 22:33:15

+0

@Michael - YW!這是一個很好的參考正則表達式 - http://www.regular-expressions.info/reference.html – 2010-08-17 22:46:36

+0

這很好,除了它也會匹配外國人後的字符。例如,如果我的字符串是「Männ」,並且我搜索「n」,它會匹配n之後的任何想法? – Abadaba 2010-08-17 23:18:14

1

使用此:

string.match(/^th|\sth/gi); 

實例:

'is this is a string'.match(/^th|\sth/gi); 


'the string: This is a string'.match(/^th|\sth/gi); 

結果:

[ 「TH」, 「TH」]

[ 「TH」]

+1

由於op提到,「任何單詞」可能並不安全,因此假設詞邊界空間。你的正則表達式與「Here-is-the-sentence!」中的任何內容都不匹配。這就是爲什麼'\ b'作爲單詞邊界更好。 – 2010-08-17 22:43:55

1
var matches = "This is the best".match(/\bth/ig); 

回報:

["Th", "th"] 

正則表達式表示:匹配「日」忽略大小寫和全球(意思是,在只有一個比賽不停止),如果「日」是第一個字的字符串或者「th」前面是空格字符。

+0

由於op提到,「任何單詞」可能不是安全的假設一個字邊界的空間。你的正則表達式與「Here-is-the-sentence!」中的任何內容都不匹配。這就是爲什麼'\ b'作爲單詞邊界更好。 – 2010-08-17 22:42:58

+0

@Peter謝謝!不知道'\ b'! – 2010-08-17 23:16:37

+0

@Vivn - 由於行字符「^」的開始,您的示例仍然只匹配「Th」。全局搜索字符串的開始行仍然只返回1查找;) - http://jsfiddle.net/NHcLx/ – 2010-08-17 23:36:29

1

在正則表達式中使用g標誌。它代表「全球」,我認爲,它搜索所有匹配,而不是隻有第一個。

您還應該使用i標誌進行不區分大小寫的匹配。

你正則表達式(/<regex>/<flags>)的端部或第二參數添加標誌,以new RegExp(pattern, flags)

例如:

var matches = "This is the best".match(/\bth/gi); 

,或者使用RegExp對象:

var re = new RegExp("\\bth", "gi"); 
var matches = re.exec("This is the best"); 

編輯: 在正則表達式中使用\b o匹配b oundary的一個詞。請注意,它並不真正匹配任何特定字符,而是字或字符串的開頭或結尾。

+0

但是這將搜索字符串中我不想要的字詞 – Abadaba 2010-08-17 22:31:27

+0

這也會匹配字符串中的'moth'。 – 2010-08-17 22:31:41

+0

這將匹配'th'的所有匹配項,無論它們是否在單詞的開頭。 – 2010-08-17 22:31:55

相關問題