正则表达式匹配字符串中多个单词的开头

Aba*_*aba 11 javascript regex

在Javascript中,我希望能够匹配以某个短语开头的字符串.但是,我希望它能够匹配短语中任何单词的开头,而不仅仅是短语的开头.

例如:

短语:"这是最好的"

需要匹配:"th"

结果:匹配Th和th

编辑:\ b工作得很好,但它提出了另一个问题:

在外国人之后它也会匹配字符.例如,如果我的字符串是"Männ",并且我搜索"n",它将匹配M之后的n ...任何想法?

Pet*_*tai 23

"This is the best moth".match(/\bth/gi);
Run Code Online (Sandbox Code Playgroud)

或者使用字符串的变量

var string = "This is the best moth";
alert(string.match(/\bth/gi));
Run Code Online (Sandbox Code Playgroud)

\b在正则表达式中是单词边界,因此\bth只匹配th单词开头的单词边界.

gi 用于全局匹配(查找所有实例)和不区分大小写

(我扔到moth那里作为提醒,检查它是不匹配的)

jsFiddle例子


编辑:

所以,上面只返回你匹配的部分(th).如果要返回整个单词,则必须匹配整个单词.

这是事情变得棘手的地方.首先没有HTML实体字母:

string.match(/\bth[^\b]*?\b/gi);
Run Code Online (Sandbox Code Playgroud)

要匹配整个单词,请从单词边界\b抓取th后跟非单词边界,[^\b]直到到达另一个单词边界\b.在*你想寻找0个或多个先前(非字边界)的手段?标志意味着这是一个懒惰的比赛.换句话说,它不会扩大到尽可能大,但在第一次机会时停止.

如果你有像ä(ä)这样的HTML实体字符,那么事情变得非常复杂,你必须使用空格或空格以及一组可能在字边界处定义的字符.

string.match(/\sth[^\s]*|^th[^\s]*/gi);
Run Code Online (Sandbox Code Playgroud)

HTML实体的示例.

由于我们没有使用单词边界,我们必须单独处理字符串的开头(|^).

以上将捕获单词开头的空白区域.使用\b不会捕获空白,因为\b没有宽度.