匹配 JS 中除反向引用之外的所有字符

Match every character but backreference in JS

我正在努力使用正则表达式来捕捉 __ 'Anything'__ "Anything" 中的 Anything

到目前为止,我已经尝试过类似的方法 __\s*(['"])([^']+) 但它不适用于第二个示例。

我实际上正在尝试做类似 [^] 的事情来匹配除第一个反向引用之外的所有内容,但这行不通。

您可以使用 tempered greedy token 来模拟带有多个替代字符的否定字符 class:

__\s*(['"])((?:(?!).)*)
            ^^^^^^^^^^^^

regex demo

如果引号之间可以换行,请将 . 替换为 [\s\S]:

__\s*(['"])((?:(?!)[\s\S])*)

这是一个工作片段:

var re = /__\s*(['"])((?:(?!).)*)/g; 
var str = '__ \'Anything1\' and in __ "Anything2"';

while ((m = re.exec(str)) !== null) {
   document.body.innerHTML += m[2] + "<br/>"; // demo
}

根据 Sebastian Proske 的评论,这里当然可以使用交替:

__\s*(?:'([^']*)'|"([^"]*)")

只是值将在不同的组中,回溯仍然存在。

var re = /__\s*(?:'([^']*)'|"([^"]*)")/g; 
var str = '__ \'Anything1\' and in __ "Anything2"';
while ((m = re.exec(str)) !== null) {
  document.body.innerHTML += (m[2] ? m[2] : m[1]) + "<br/>"; // demo
}