匹配 JS 中除反向引用之外的所有字符
Match every character but backreference in JS
我正在努力使用正则表达式来捕捉 __ 'Anything'
和 __ "Anything"
中的 Anything
。
到目前为止,我已经尝试过类似的方法 __\s*(['"])([^']+)
但它不适用于第二个示例。
我实际上正在尝试做类似 [^]
的事情来匹配除第一个反向引用之外的所有内容,但这行不通。
您可以使用 tempered greedy token 来模拟带有多个替代字符的否定字符 class:
__\s*(['"])((?:(?!).)*)
^^^^^^^^^^^^
如果引号之间可以换行,请将 .
替换为 [\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
}
我正在努力使用正则表达式来捕捉 __ 'Anything'
和 __ "Anything"
中的 Anything
。
到目前为止,我已经尝试过类似的方法 __\s*(['"])([^']+)
但它不适用于第二个示例。
我实际上正在尝试做类似 [^]
的事情来匹配除第一个反向引用之外的所有内容,但这行不通。
您可以使用 tempered greedy token 来模拟带有多个替代字符的否定字符 class:
__\s*(['"])((?:(?!).)*)
^^^^^^^^^^^^
如果引号之间可以换行,请将 .
替换为 [\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
}