我正在尝试匹配字符串上的某个单词,并且仅当它不存在时,我才想使用OR |
运算符来匹配另一个单词....但是该匹配忽略了...我如何确保行为有效:
const str = 'Soraka is an ambulance 911'
const regex = RegExp('('+'911'+'|'+'soraka'+')','i')
console.log(str.match(regex)[0]) // should get 911 instead
最佳答案
911
出现在字符串的末尾,而Soraka
出现在字符串的后部,并且正则表达式引擎逐个字符地进行迭代,因此Soraka
首先匹配,即使它位于替换的右侧。
一种选择是改为在捕获的先行中匹配Soraka
或911
,然后使用regex匹配对象,在两组之间交替以获得不是undefined
的一组:
const check = (str) => {
const regex = /^(?=.*(911)|.*(Soraka))/;
const match = str.match(regex);
console.log(match[1] || match[2]);
};
check('Soraka is an ambulance 911');
check('foo 911');
check('foo Soraka');