我想构建一个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/
答案 0 :(得分:3)
因为[]
匹配任何内部字母所以它说“匹配a或d或|或a或e”。您需要使用捕获组而不是使用或。
尝试
var regex_string = "(^(ad|ae)|-(ad|ae))";
答案 1 :(得分:3)
[ ... ]
表示一个字符类,无论位置如何,内部的任何内容都匹配。此外,[ae]
只匹配一个字符,a
或e
。
对于你的所作所为,直接翻译会给出:
(?:^(?:ad|ae)|-(?:ad|ae))
您在组中使用|
(( ... )
用于捕获组,(?: ... )
用于非捕获组;如果您不打算保存捕获以供以后使用,则优先使用后者因为他们提高了正则表达速度和记忆力。)
但可以稍微优化一下:
(?:^|-)a[ed]
应该一样好。
答案 2 :(得分:0)
这里我对“-ae AND -ad”的解释:
/^(?:ad|ae)|-ad.*-ae|-ae.*-ad/