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

时间:2010-08-17 22:22:18

标签: javascript regex

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

例如:

短语:“这是最好的”

需要匹配:“th”

结果:匹配Th和th

编辑:\ b效果很好,但它提出了另一个问题:

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

4 个答案:

答案 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作为提醒,检查它是不匹配的)

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没有宽度。

答案 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 。请注意,它并不真正匹配任何特定字符,而是字或字符串的开头或结尾。