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

时间:2014-06-11 07:03:26

标签: javascript regex

我试图检查一个字符串是否包含以下任何一个词:

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);

}

但由于一些奇怪的原因,这不匹配。

任何想法我做错了什么?

1 个答案:

答案 0 :(得分:14)

这不是定义文字regular expression in Javascript的正确方法。

更改

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

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('|'));

如果您的姓名可能包含特殊字符,则您必须使用function to escape them

如果你希望你的单词不是其他单词的一部分(意思是你不想匹配" ABC")那么你应该检查单词边界:

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