JavaScript如何检查字符串是否包含正则表达式中的任意单词

6
我正在尝试检查一个字符串是否包含以下任何单词:
AB|AG|AS|Ltd|KB|University

我的当前代码:

var acceptedwords = '/AB|AG|AS|Ltd|KB|University/g'
var str = 'Hello AB';

var matchAccepted = str.match(acceptedwords);
console.log(matchAccepted);

if (matchAccepted !== null) { // Contains the accepted word
    console.log("Contains accepted word: " + str);          

} else {
    console.log("Does not contain accepted word: " + str);

}

但是出于某些奇怪的原因,这并不匹配。
你有什么想法,我做错了什么吗?

new RegExp('AB|AG|AS|Ltd|KB|University', 'g')/AB|AG|AS|Ltd|KB|University/g,但不是两者的组合 :) - Ja͢ck
1个回答

21

这不是在JavaScript中定义正则表达式的正确方式regular expression

更改

var acceptedwords = '/AB|AG|AS|Ltd|KB|University/g'
to
var acceptedwords = /AB|AG|AS|Ltd|KB|University/;

你可能注意到我删除了 g 标志: 因为它是无用的,你只想知道是否有一个匹配项,而不想获取它们所有。甚至在这里你也不必使用 match,你可以使用 test

var str = 'Hello AB';
if (/AB|AG|AS|Ltd|KB|University/.test(str)) { // Contains the accepted word
    console.log("Contains accepted word: " + str);          
} else {
    console.log("Does not contain accepted word: " + str);
}

如果你想用字符串构建一个正则表达式,假设没有任何特殊字符,你可以这样做:

var words = ['AB','AG', ...
var regex = new RegExp(words.join('|'));

如果您的名称可能包含特殊字符,您需要使用函数来转义它们

如果您希望您的单词不是其他单词的一部分(这意味着您不想匹配“ABC”),则应检查单词边界:

regex = new RegExp(words.map(function(w){ return '\\b'+w+'\\b' }).join('|'),'g');

我能否在 / myVarHere / g 之间插入一个字符串? - Alosyius
1
@Alosyius 请查看var regex = RegExp('AB|AG|AS|Ltd|KB|University', 'g'); 构造函数。 - h2ooooooo
@Alosyius: [javascript] variable in regex - Felix Kling
太棒了!尽快接受 :) - Alosyius
1
@dystroy 接受的单词难道不需要用单词边界\b包围吗?否则当接受的单词出现在其他单词中时,可能会出现匹配。详见:http://regex101.com/r/zS8dT9 - garyh
@garyh 取决于目标,但是是的,那是一个有趣的评论。已编辑。 - Denys Séguret

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接