在Javascript中,我希望能够匹配以某个短语开头的字符串。但是,我希望它能够匹配短语中任何单词的开头,而不仅仅是短语的开头。
例如:
短语:“这是最好的”
需要匹配:“th”
结果:匹配Th和th
编辑:\ b效果很好,但它提出了另一个问题:
它也将匹配外国之后的字符。例如,如果我的字符串是“Männ”,并且我搜索“n”,它将匹配M之后的n ...任何想法?
答案 0 :(得分: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
作为提醒,检查它是不匹配的)
修改强>
因此,上面只返回您匹配的部分(th
)。如果要返回整个单词,则必须匹配整个单词。
这是事情变得棘手的地方。首先没有HTML实体字母:
string.match(/\bth[^\b]*?\b/gi);
要匹配整个单词,请从单词边界\b
开始抓取th
后跟非单词边界[^\b]
,直到找到另一个单词边界\b
。 *
表示您要查找前一个(非单词边界)中的0个或更多个?
标记表示这是一个惰性匹配。换句话说,它没有扩大到尽可能大,但在第一次机会停止。
如果您有像ä(ä
)这样的HTML实体字符,事情变得非常复杂,您必须使用空格或空格以及一组可能位于字边界的已定义字符。
string.match(/\sth[^\s]*|^th[^\s]*/gi);
由于我们没有使用单词边界,我们必须单独处理字符串的开头(|^
)。
以上将捕获单词开头的空白区域。使用\b
不会占用空格,因为\b
没有宽度。
答案 1 :(得分: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”]
答案 2 :(得分:1)
var matches = "This is the best".match(/\bth/ig);
返回:
["Th", "th"]
正则表达式意味着:如果“th”是字符串中的第一个单词或“th”前面有空格字符,则匹配“th”忽略大小写和全局(意思是,不要只停留在一个匹配项)
答案 3 :(得分: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
来匹配单词的 b 。请注意,它并不真正匹配任何特定字符,而是字或字符串的开头或结尾。