在Javascript中,我希望能夠匹配以特定短語開頭的字符串。但是,我希望它能夠匹配短語中任何單詞的開頭,而不僅僅是短語的開頭。正則表達式匹配字符串中多個單詞的開始
例如:
短語: 「這是最好的」
需要匹配: 「TH」
結果:匹配Th和次
編輯:\ B工作大然而它提出了另一個問題:
它也將匹配外國人後的字符。例如,如果我的字符串是「Männ」,並且我搜索「n」,它會匹配n之後的任何想法?
在Javascript中,我希望能夠匹配以特定短語開頭的字符串。但是,我希望它能夠匹配短語中任何單詞的開頭,而不僅僅是短語的開頭。正則表達式匹配字符串中多個單詞的開始
例如:
短語: 「這是最好的」
需要匹配: 「TH」
結果:匹配Th和次
編輯:\ B工作大然而它提出了另一個問題:
它也將匹配外國人後的字符。例如,如果我的字符串是「Männ」,並且我搜索「n」,它會匹配n之後的任何想法?
"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
作爲一個提醒,以檢查它是不匹配的)
編輯:
所以,一個bove只返回你匹配的部分(th
)。如果你想返回整個單詞,你必須匹配整個單詞。
這是事情變得棘手的地方。首先,沒有HTML實體信:
string.match(/\bth[^\b]*?\b/gi);
爲了配合整個字從字邊界\b
搶去th
其次是非字邊界[^\b]
,直到你到另一個詞邊界\b
。 *
表示您想要查找0個或更多以前的(非單詞邊界)?
標記表示這是一個懶惰匹配。換句話說,它不會擴大到儘可能大,但在第一次機會時停下來。
如果您有像ä(ä
)這樣的HTML實體字符,事情變得非常複雜,您必須使用空格或空格以及可能位於字邊界的一組定義字符。
string.match(/\sth[^\s]*|^th[^\s]*/gi);
因爲我們不使用單詞邊界,我們必須採取的字符串的開頭分開(|^
)的照顧。
上面將捕捉單詞開頭的空格。使用\b
不會捕獲空白區域,因爲\b
沒有寬度。
使用此:
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」]
由於op提到,「任何單詞」可能並不安全,因此假設詞邊界空間。你的正則表達式與「Here-is-the-sentence!」中的任何內容都不匹配。這就是爲什麼'\ b'作爲單詞邊界更好。 – 2010-08-17 22:43:55
var matches = "This is the best".match(/\bth/ig);
回報:
["Th", "th"]
正則表達式表示:匹配「日」忽略大小寫和全球(意思是,在只有一個比賽不停止),如果「日」是第一個字的字符串或者「th」前面是空格字符。
由於op提到,「任何單詞」可能不是安全的假設一個字邊界的空間。你的正則表達式與「Here-is-the-sentence!」中的任何內容都不匹配。這就是爲什麼'\ b'作爲單詞邊界更好。 – 2010-08-17 22:42:58
@Peter謝謝!不知道'\ b'! – 2010-08-17 23:16:37
@Vivn - 由於行字符「^」的開始,您的示例仍然只匹配「Th」。全局搜索字符串的開始行仍然只返回1查找;) - http://jsfiddle.net/NHcLx/ – 2010-08-17 23:36:29
在正則表達式中使用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的一個詞。請注意,它並不真正匹配任何特定字符,而是字或字符串的開頭或結尾。
但是這將搜索字符串中我不想要的字詞 – Abadaba 2010-08-17 22:31:27
這也會匹配字符串中的'moth'。 – 2010-08-17 22:31:41
這將匹配'th'的所有匹配項,無論它們是否在單詞的開頭。 – 2010-08-17 22:31:55
+1感謝您向我介紹\ b :) – 2010-08-17 22:33:15
@Michael - YW!這是一個很好的參考正則表達式 - http://www.regular-expressions.info/reference.html – 2010-08-17 22:46:36
這很好,除了它也會匹配外國人後的字符。例如,如果我的字符串是「Männ」,並且我搜索「n」,它會匹配n之後的任何想法? – Abadaba 2010-08-17 23:18:14