我正在尝试检查字符串是否包含以下任何单词:
AB|AG|AS|Ltd|KB|University
Run Code Online (Sandbox Code Playgroud)
我目前的代码:
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);
}
Run Code Online (Sandbox Code Playgroud)
但由于一些奇怪的原因,这是不匹配的.
我有什么想法我做错了吗?
Den*_*ret 16
这不是在Javascript中定义文字正则表达式的正确方法.
更改
var acceptedwords = '/AB|AG|AS|Ltd|KB|University/g'
Run Code Online (Sandbox Code Playgroud)
至
var acceptedwords = /AB|AG|AS|Ltd|KB|University/;
Run Code Online (Sandbox Code Playgroud)
你可能会注意到我删除了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);
}
Run Code Online (Sandbox Code Playgroud)
如果你想用字符串构建一个正则表达式,假设它们都不包含任何特殊字符,你可以这样做
var words = ['AB','AG', ...
var regex = new RegExp(words.join('|'));
Run Code Online (Sandbox Code Playgroud)
如果您的名字可能包含特殊字符,则必须使用函数来逃避它们.
如果你希望你的单词不是其他单词的一部分(意思是你不想匹配"ABC")那么你应该检查单词边界:
regex = new RegExp(words.map(function(w){ return '\\b'+w+'\\b' }).join('|'),'g');
Run Code Online (Sandbox Code Playgroud)