我有以下正则表达式,该正则表达式可以在chrome中使用,但会导致Firefox或safari错误。我需要对其进行修改以使其正常工作。谁能帮助一个可怜的灵魂?预先感谢!
regex:/(?=<tag>)(.*?)(?<=<\/tag>)/
基本上,我必须匹配<tag>
和</tag>
之间的任何字符,并且需要保留两个标签。我将此表达式用作array.split的参数。
输入:"The quick brown <tag>fox</tag> jumps over the lazy <tag>dog</tag>"
操作:input.split(regex)
输出: ["The quick brown ", "<tag>fox</tag>", " jumps over the lazy ", "<tag>dog</tag>"]
答案 0 :(得分:2)
firefox和safari尚不支持后向查找,您可以使用捕获组(使用捕获组,以便在我们拆分后的模式也将添加到输出中)并在<tag> </tag>
上进行拆分>
let str = "The quick brown <tag>fox</tag> jumps over the lazy <tag>dog</tag>"
let regex = /(<tag>.*?<\/tag>)/
console.log(str.split(regex).filter(Boolean))
答案 1 :(得分:0)
也许
<tag>.*?<\/tag>|[^<>]+
可以正常工作:
function regularExpression(regex, str) {
let m, arr = [];
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
m.forEach((match, groupIndex) => {
arr.push(match.trim());
console.log(`Found match, group ${groupIndex}: ${match}`);
});
}
return arr;
}
const expression = /<tag>.*?<\/tag>|[^<>]+/g;
const string = 'The quick brown <tag>fox</tag> jumps over the lazy <tag>dog</tag>';
console.log(regularExpression(expression, string));
如果您希望简化/修改/探索表达式,请在regex101.com的右上角进行说明。如果愿意,您还可以在this link中查看它如何与某些示例输入匹配。
jex.im可视化正则表达式: