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

标签 javascript regex

在 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 example


编辑:

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

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

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

Example

要匹配整个单词,从单词边界 \b 获取 th 后跟非单词边界 [^\b] 直到你到达另一个单词边界 \b* 表示您要查找 0 个或多个前面的(非单词边界) ? 标记表示这是惰性匹配。换句话说,它不会扩展到尽可能大,而是一有机会就停止。

如果您有像 ä (ä) 这样的 HTML 实体字符,事情会很快变得复杂起来,您必须使用空格或空格以及一组可能位于单词边界的已定义字符。

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

Example with HTML entities.

因为我们不使用单词边界,所以我们必须单独处理字符串的开头 (|^)。

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

关于javascript - 正则表达式匹配字符串中多个单词的开头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3507453/

相关文章:

javascript - 这两个变量设置在 JavaScript 中是否相等?

javascript - 如何在clearTimeout后恢复动画

javascript - 获取循环中 td 元素的 tr id

正则表达式:匹配除反向引用之外的所有内容

c# - 在不计算重复项的情况下计算字符串中子字符串的出现次数

java - 匹配模式,除非匹配是空字符串

javascript - 即使服务器已启动,信号器也会每 2 秒重新连接一次

php - 从 HTML 网页中的 Google Maps iframe 获取坐标

regex - 生成与某些输入集匹配的正则表达式是否是一个可解决的问题?

regex - 提取文件名