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

Regular expressions in JavaScript: match multiple substrings at the beginning of a string?

本文关键字:字符串 开头 正则表达式 JavaScript      更新时间:2023-09-26

我想构建一个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 here: http://jsfiddle.net/xGgan/1/

因为[]匹配里面的任何字母 所以它说"匹配 a 或 d 或 |或 a 或 e"。您需要将捕获组与 or 一起使用。

尝试

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

[ ... ]表示一个角色类,无论位置如何,里面的任何内容都将匹配。此外,[ae]仅匹配一个字符,即ae

对于您的工作,直接翻译它会得到:

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

您可以在组中使用|( ... )用于捕获组,(?: ... )用于非捕获组;如果您不打算保存捕获以供以后使用,则后者更可取,因为它们提高了正则表达式速度和内存)。

但这可以稍微优化一下:

(?:^|-)a[ed]

应该匹配一样好。

这里是我对"-ae 和 -ad"的解释:

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