正则表达式(?<= string)给出无效的组错误?

raz*_*zak 1 javascript regex

我正在尝试创建一个正则表达式来匹配类似的字符串,<tag>something</tag>并且我希望结果仅返回something不带标签的返回值。

我尝试使用:

string.match(/(?<=<tag>).*?(?=<\/tag>)/g);
Run Code Online (Sandbox Code Playgroud)

但它给出了一个错误:

SyntaxError:Invalid regular expression: /(?<=<tag>).*?(?=<\/tag>)/: Invalid group;

为什么它不起作用?

Tha*_*you 5

我想你会喜欢这样

/(?:<(tag)>)((?:.(?!<\/\1>))+.)(?:<\/\1>)/g
Run Code Online (Sandbox Code Playgroud)

正则表达式可视化

可视化比赛,加油!

这很方便,因为后向\1 引用匹配标记


在这样的文字上使用它

var re  = /(?:<(tag)>)((?:.(?!<\/\1>))+.)(?:<\/\1>)/g,
    str = "this is <tag>some text</tag> and it does <tag>matching</tag>",
    match;

while ((match = re.exec(str)) !== null) {
  console.log(match[1], match[2]);
};
Run Code Online (Sandbox Code Playgroud)

输出量

tag some text
tag matching
Run Code Online (Sandbox Code Playgroud)

苏打水!你可以简单的修改(tag)(tag|bonus|soda)有它的这个字符串工作

<tag>yay</tag> and there's even <bonus>sodas</bonus> in <soda>cans</soda>
Run Code Online (Sandbox Code Playgroud)

注意,如果嵌套标签,则必须递归应用此正则表达式。