[英]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
扔在那里作為提醒,檢查它是不匹配的)
編輯:
所以,上面只返回你匹配的部分( th
)。 如果要返回整個單詞,則必須匹配整個單詞。
這是事情變得棘手的地方。 首先沒有HTML實體字母:
string.match(/\bth[^\b]*?\b/gi);
要匹配整個單詞,請從單詞邊界\\b
抓取th
后跟非單詞邊界[^\\b]
直到找到另一個單詞邊界\\b
。 *
表示你想要查找前面的0個或多個(非單詞邊界) ?
mark表示這是一個懶惰的匹配。 換句話說,它不會擴大到盡可能大,但在第一次機會時停止。
如果你有像ä( ä
)這樣的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”]
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.