JavaScript中的正则表达式:匹配字符串开头的多个子字符串?

时间:2013-12-17 19:23:45

标签: javascript regex

我想构建一个JavaScript正则表达式,以匹配以“ad”或“ae”开头的所有单词,或者包含“-ad”和“-ae”的所有单词。

这是我尝试过的:

var regex_string = "^[ad|ae]|-[ad|ae]";
var re = RegExp(regex_string, "i");

var matches = _.filter(data, function(r) {
  if (re.test(r)) {
    return true;
  }
});

但是,这匹配所有以'a','d'或'e'开头的单词。

如何修改正则表达式以仅匹配这些字符串?

JSFiddle:http://jsfiddle.net/xGgan/1/

3 个答案:

答案 0 :(得分:3)

因为[]匹配任何内部字母所以它说“匹配a或d或|或a或e”。您需要使用捕获组而不是使用或。

尝试

var regex_string = "(^(ad|ae)|-(ad|ae))";

答案 1 :(得分:3)

[ ... ]表示一个字符类,无论位置如何,内部的任何内容都匹配。此外,[ae]只匹配一个字符,ae

对于你的所作所为,直接翻译会给出:

(?:^(?:ad|ae)|-(?:ad|ae))

您在组中使用|( ... )用于捕获组,(?: ... )用于非捕获组;如果您不打算保存捕获以供以后使用,则优先使用后者因为他们提高了正则表达速度和记忆力。)

但可以稍微优化一下:

(?:^|-)a[ed]

应该一样好。

答案 2 :(得分:0)

这里我对“-ae AND -ad”的解释:

/^(?:ad|ae)|-ad.*-ae|-ae.*-ad/