正则表达式:匹配一个不后跟特定字符的字符

5
我正在为Brackets编写CodeMirror扩展。要定义SimpleCodeMode,我需要进行一些模式匹配,并尝试弄清楚如何实现$subject。
例如:匹配所有HTML标签的<
<body>

请忽略后面跟有<%的HTML标签
<% if %> 

注意:我只想获取它的起始<

如果有人能帮我解决这个问题,那将是非常有帮助的。如果您需要更多细节,请告诉我。

谢谢!


3
使用正则表达式解析模板字符串可能是一个非常糟糕的主意。 - Daniel A. White
嗨@DanielA.White,这是为了编写一个CodeMode扩展。 - Jerad Rutnam
1个回答

14

虽然这看起来似乎是一个不好的想法,但我可以看到两种方法来实现:

1. 查找<后跟除了%字符以外的任何字符,然后忽略它

(<)(?:[^%])

[^]序列允许您搜索除以下字符外的任何内容。

(?:)序列用于非捕获组。

2.(更好的方法,如果支持)使用否定前瞻查找不跟随%的输入

<(?!%)

(?!)序列成功,如果不匹配以下字符,则不会被捕获。

如果您还想对%>执行此操作,您可以只需“反转”第一选项:

(?:[^%])(>)

或者您需要一个否定回顾:

(注意,在这里,前瞻将无法按您需要的方式工作,因为您需要向后移动)

(?<!%)>


我不知道你正在使用什么工具,但是你可以用大多数工具将你得到的内容替换为$1变量。 - Azaghal
@JeradRutnam 你说的第二个字符是什么意思?它已经忽略了第二个“%”。 - phuclv
我们能否以某种方式将$1与匹配项(<)[^%]一起添加? - Jerad Rutnam
这只是解决了问题。非常感谢@Baptiste,感谢你的辛勤付出。 - Jerad Rutnam
@Baptiste,还有一个问题,这个((?<!%)>)是删除>后面的所有内容吗? - Jerad Rutnam
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接