JS Regex lookbehind无法在Firefox和Safari中使用

时间:2019-10-19 04:24:51

标签: javascript regex firefox regex-lookarounds

我有以下正则表达式,该正则表达式可以在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>"]

2 个答案:

答案 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中查看它如何与某些示例输入匹配。


RegEx电路

jex.im可视化正则表达式:

enter image description here