如果包含某些字符,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>"
使(?!)
的负前瞻.
部分匹配。/(\<((?!\<)[^\>])*\>)/
这样,每次*
点都匹配时,它必须符合外观。
提前查找比向后查找更好,因为您关心的不匹配字符是下一个字符,而不是最后一个字符。
此外,用.
= [^\>]
替换匹配的任何内容everything except closing tag
可以防止结束标记过冲。
除了提前查找,您还可以将其重写为/(\<[^\>\<]*\>)/
,= match everything between opening and closing tag that does not contain any tag
我只是重新阅读了你的问题。如果我理解正确,并且您也想匹配外部标签,则在内部标签开始之前,都可以使用它。匹配开头<
+任何非标记+ >
(如果存在)
\<([^\>\<])*(\>)?