我正在尝试匹配字符串上的某个单词,并且仅当它不存在时,我才想使用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首先匹配,即使它位于替换的右侧。

一种选择是改为在捕获的先行中匹配Soraka911,然后使用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');

10-07 22:34