javascript - 如果未找到下一个关闭,RegExp 忽略开始字符
问题描述
如果 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
我刚刚重读了你的问题。如果我理解正确并且您也想匹配外部标签,直到内部标签的开始,您可以使用它。它匹配开头<
+ 任何非标记 + 关闭(>
如果存在)
<[^><]*>?
推荐阅读
- java - (UDP) 服务器无法与客户端正确通信
- excel - Excel - 引用具有不同行的特定列中的单元格的通用公式
- ios - “AuthDataResult”没有成员“profileChangeRequest”
- vue.js - 如何使模态在打开一次后具有错误值
- kubernetes - 主机终止在大使入口中不起作用
- mysql - MySQL SELECT 日期时间与间隔之间的所有行
- css - 引导程序中的导航栏搜索按钮无法正常工作
- state-machine - 这个 FSA 转换图是否正确?
- python - 只有在完整句子正确的情况下才能使事件发生(ctx.strict?)
- python - 在绘图中删除图形和y轴/左侧之间的空间