我试图检查一个字符串是否包含以下任何一个词:
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);
}
但由于一些奇怪的原因,这不匹配。
任何想法我做错了什么?
答案 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');