RegExp如果找不到下一个结束符,则忽略开始字符

问题描述 投票:0回答:1

如果包含某些字符,RegExp是否有办法忽略匹配项?我环顾四周,发现负匹配在某些情况下有效(?!\<)。但是直到找到下一个左括号,我才能找到一种方法来创建带有可选任意字符的否定匹配。我很抱歉解释不好。我猜这是一个更有意义的示例。

const text = "hello <friend>. My age is < twenty <unit>.>Signature<<signature>."
const matches = text.split(/(\<(?!\<).*?\>)/g)
// ["hello ", "<friend>", ". My age is ", "< twenty <unit>", ".>Signature<", "<signature>", "."]

问题是"< twenty <unit>"。我真正要寻找的是值"< twenty ", "<unit>"

中的两个元素
javascript regex regex-negation
1个回答
1
投票

使(?!)的负前瞻.部分匹配。/(\<((?!\<)[^\>])*\>)/

这样,每次*点都匹配时,它必须符合外观。

提前查找比向后查找更好,因为您关心的不匹配字符是下一个字符,而不是最后一个字符。

此外,用. = [^\>]替换匹配的任何内容everything except closing tag可以防止结束标记过冲。

除了提前查找,您还可以将其重写为/(\<[^\>\<]*\>)/,= match everything between opening and closing tag that does not contain any tag

我只是重新阅读了你的问题。如果我理解正确,并且您也想匹配外部标签,则在内部标签开始之前,都可以使用它。匹配开头< +任何非标记+ >(如果存在)

\<([^\>\<])*(\>)?
© www.soinside.com 2019 - 2024. All rights reserved.