在 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 个或多个前面的(非单词边界) ?
标记表示这是惰性匹配。换句话说,它不会扩展到尽可能大,而是一有机会就停止。
如果您有像 ä (ä
) 这样的 HTML 实体字符,事情会很快变得复杂起来,您必须使用空格或空格以及一组可能位于单词边界的已定义字符。
string.match(/\sth[^\s]*|^th[^\s]*/gi);
因为我们不使用单词边界,所以我们必须单独处理字符串的开头 (|^
)。
以上将捕获单词开头的空格。使用 \b
不会捕获空白,因为 \b
没有宽度。
关于javascript - 正则表达式匹配字符串中多个单词的开头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3507453/