确保只有第一个不存在时,正则表达式才移至第二个OR元素

use*_*789 2 javascript regex

我试图匹配一个字符串上的某个单词,并且只有当它不存在时,我才想使用OR |运算符来匹配另一个单词....但是该匹配忽略了...我如何确保行为原理:

const str = 'Soraka is an ambulance 911'
const regex = RegExp('('+'911'+'|'+'soraka'+')','i')
console.log(str.match(regex)[0])     // should get 911 instead
Run Code Online (Sandbox Code Playgroud)

Cer*_*nce 6

911发生在字符串的末尾,而Soraka发生在字符串的后半部,并且正则表达式引擎逐个字符地进行迭代,因此Soraka即使它位于交替符的右侧,也要首先进行匹配。

一种选择是匹配Soraka911捕获的先行替代,然后使用正则表达式匹配对象,在两组之间交替以获得不是的一组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');
Run Code Online (Sandbox Code Playgroud)