我正在尝试创建一个正则表达式来匹配一个字符串<tag>something</tag>
,我希望结果只返回something
没有标签。
我尝试使用:
string.match(/(?<=<tag>).*?(?=<\/tag>)/g);
但它给出了一个错误:
SyntaxError:Invalid regular expression: /(?<=<tag>).*?(?=<\/tag>)/: Invalid group
;
为什么它不工作?
我正在尝试创建一个正则表达式来匹配一个字符串<tag>something</tag>
,我希望结果只返回something
没有标签。
我尝试使用:
string.match(/(?<=<tag>).*?(?=<\/tag>)/g);
但它给出了一个错误:
SyntaxError:Invalid regular expression: /(?<=<tag>).*?(?=<\/tag>)/: Invalid group
;
为什么它不工作?
我想你会喜欢这个的
/(?:<(tag)>)((?:.(?!<\/\1>))+.)(?:<\/\1>)/g
这很方便,因为\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]);
};
输出
tag some text
tag matching
奖金苏打水!您可以简单地修改(tag)
为(tag|bonus|soda)
让它在这个字符串上工作
<tag>yay</tag> and there's even <bonus>sodas</bonus> in <soda>cans</soda>
当心如果你嵌套标签,你将不得不递归地应用这个正则表达式。
看起来您正在尝试使用 JavaScript 不支持的lookbehind。您必须将模式更改为如下所示:
/<tag>(.*?)<\/tag>/g
然后提取相应的组。例如:
/<tag>(.*?)<\/tag>/g.exec('<tag>something</tag>')[1]; // something
尝试这个:
var result = /<tag>(.*?)<\/tag>/.exec(myString,"g");
之间的文本然后在结果 [1] 中。