簡體   English   中英

正則表達式匹配字符串中多個單詞的開頭

[英]Regex match for beginning of multiple words in string

在Javascript中,我希望能夠匹配以某個短語開頭的字符串。 但是,我希望它能夠匹配短語中任何單詞的開頭,而不僅僅是短語的開頭。

例如:

短語:“這是最好的”

需要匹配:“th”

結果:匹配Th和th

編輯:\\ b工作得很好,但它提出了另一個問題:

在外國人之后它也會匹配字符。 例如,如果我的字符串是“Männ”,並且我搜索“n”,它將匹配M之后的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扔在那里作為提醒,檢查它是不匹配的)

jsFiddle例子


編輯:

所以,上面只返回你匹配的部分( th )。 如果要返回整個單詞,則必須匹配整個單詞。

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

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

要匹配整個單詞,請從單詞邊界\\b抓取th后跟非單詞邊界[^\\b]直到找到另一個單詞邊界\\b *表示你想要查找前面的0個或多個(非單詞邊界) ? mark表示這是一個懶惰的匹配。 換句話說,它不會擴大到盡可能大,但在第一次機會時停止。

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

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

HTML實體的示例。

由於我們沒有使用單詞邊界,我們必須單獨處理字符串的開頭( |^ )。

以上將捕獲單詞開頭的空白區域。 使用\\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”]

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

收益:

["Th", "th"]

正則表達式意味着:如果“th”是字符串中的第一個單詞或者如果“th”前面有空格字符,則匹配“th”忽略大小寫和全局(意思是,不要僅停留在一個匹配項)。

在正則表達式中使用g標志。 我認為它代表“全球”,它會搜索所有匹配而不是第一個匹配。

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

您將標志添加到正則表達式的末尾( /<regex>/<flags> )或作為new RegExp(pattern, 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的正則表達式匹配一個字中的B oundary。 請注意,它並不真正匹配任何特定字符,而是字或字符串的開頭或結尾。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM