![]() |
1
3
最简单的解决方案是替换所有标签,不管它们是否关闭,并让
|
![]() |
2
1
恐怕你不能用正则表达式来表示递归。 但是,您可以使用.NET的St.RealReaReXPress使用平衡匹配来实现这一点。更多信息请参见: http://blogs.msdn.com/bclteam/archive/2005/03/15/396452.aspx 如果您使用的是.NET,您可能可以通过回调实现所需的功能。 如果没有,您可能需要滚动自己的小javascript解析器。 再次重申,如果您有能力访问服务器,那么您可以使用完整的解析器。:) 你要这个干嘛?如果不是为了预览,我强烈建议在服务器端进行处理。 |
![]() |
3
0
您可以重复应用regexp,直到它不再匹配为止。这会产生一些奇怪的事情,比如“[b][b]foo[/b][/b]”=>“<b>[b]foo</b>[/b]”=>“<b><b>foo</b></b>”,但据我所见,最终结果仍然是一个具有匹配(尽管不一定正确嵌套)标记的合理字符串。 或者如果你想做得“正确”,只需编写一个简单的递归下降解析器。虽然人们可能会期望[b] fo[u] bar [/b] bZ[/u]工作,但要用解析器来识别是很难的。 |
![]() |
4
0
嵌套块没有被替换的原因是[b]的匹配将位置放在了[/b]之后。因此,所有那些((.){1,}?)然后忽略匹配项。 在服务器端编写递归解析器是可能的——Perl使用 qr// 鲁比可能也有类似的东西。 不过,您不一定需要真正的递归。可以使用相对简单的循环来等效地处理字符串:
在这种情况下,它将通过两次:
此外,还有一些清理regex的建议:
|
![]() |
5
0
同意Richard Szalay,但他的正则表达式没有被引用正确:
更干净。注意我也改变了
|
![]() |
6
0
是的,你必须循环。或者,因为您的标记看起来非常像html标记,所以您可以替换
更新:感谢mrp,(.){1,}?是(.)+?,我的错。 |
![]() |
7
0
怎么样:
对我来说,上述结果:
这似乎是做你想做的,并且有一个优势,只需要一次通过。 免责声明:我不经常用js编写代码,所以如果我犯了任何错误,请随时指出:-) |
![]() |
8
0
你是对的,内在的模式是麻烦的。
那就是至少进行一次捕获匹配,然后捕获整个事件。标签中的每个字符都将作为一个组捕获。
您还可以在不需要结束元素名的情况下捕获它,并使用
对另一个问题不确定。 |
![]() |
DotFX · RegEx捕获关键字前但括号后的所有内容 4 月前 |
![]() |
Andrus · 如何在sql中查找第二个匹配项 4 月前 |
![]() |
iato · 确保正则表达式不从命名材料中的数字中提取 5 月前 |
![]() |
vr8ce · 非成对标记中特定字符的正则表达式 5 月前 |
![]() |
MARTIN · 交换第一个和最后一个单词,反转所有中间的字符 5 月前 |
![]() |
Carsten · 使用最近的搜索模式更改文本块 5 月前 |