2013-03-18 84 views

回答

3

你是相当接近;试试这个

<([^>q\\]*(\\[^>])?)*> 

这也将认识到情况下,像<test\\q>为无效,并拒绝畸形<test\>。如果要接受后者,请将[^>]更改为通配符.

它通过允许任何东西达到结束标记,无效q或转义\。然后,它会检查,如果下一位是一个有效的转义序列,然后在“循环”,直到它找到收盘>

更新:在评论中指出,这是一个更好的版本

<(\\[^>]|[^\\>q])*> 

这是大约是Chrome上的两倍(http://jsperf.com/nested-regex-quantifiers-vs-or)也可以更容易理解,因为它在每个字符级别上工作。

+0

+1。尼斯。注意为未来的读者明确,这也将匹配例如''(我认为OP可以隐含),而不是例如''。 – Sepster 2013-03-18 00:58:00

+0

@Sepster挺对的。从这个问题我想这就是想要的。任何希望仅允许特定转义字符的读者应该将'[^>]'位更改为'[theCharactersIWantToAllowHere]',并且应该包含'\\',因为这是相当典型的。同样,左侧的'q'可以更改为任何字符集合,以*禁止*作为普通(非转义)文本。 – Dave 2013-03-18 01:02:59

+0

我会避免这些嵌套qanttifiers:'/ <(\\[^>] | [^> q])*>/g'?它基本上是一样的正则表达式,只是一点清洁剂(我认为更易于阅读)。 – FrankieTheKneeMan 2013-03-18 05:14:14