我们希望使用正则表达式来验证文档结构。为此,我们简化了文档和正则表达式。正则表达式是从用于验证的模式生成的。 该应用程序是完全基于客户端的,并使用JavaScript编码。
一个简单的例子是这个正则表达式:
regex1 = new RegExp(/~(A{1}B?C?(D*|E*|F*|G*)+){1}~/g)
这意味着文档结构可以具有此结构
一个
-B
-D
-D
-D
-D
-D
因此文档结构被解析为~ABDDDDD~
现在我想验证我是否可以在结尾添加“A”,这将导致此字符串:~ABDDDDDA~
这与reg ex不再匹配:
"~ABDDDDDA~".match(regex1)
这确实很安静,但文档结构可以增长,如下所示:~ABDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
匹配值可以快速匹配,但如果值为: 〜ABDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDA〜
这需要很长时间,大多数时候我只是关闭浏览器并重新打开它。
有没有人有想法如何解决它?
谢谢!
更新
RegEx还应该涵盖更多,结构可以安静动态。我没有使用过RegEx Generator,这个例子是从自己开发的脚本中解析出来的,只是一个例子。在这种情况下,有一个根元素A,然后是可选的B或C.现在在一个非给定的顺序中任何数量的D,E,F,G。但至少有一个!
所以它应该对以下内容有效: “〜ABDDDDDFEG〜” “〜AGGGGGEGGD〜” “〜ABCDEFG〜” “〜ABCDDDDDDDDDDDDDDDEFGGGGGG〜”
此外,有可能E限制为0-5次出现。
一旦我使用匹配(A | B),所有浏览器都会出现真正的性能问题。 (IE,Chrome,Firefox)
有什么想法吗?是否有“匹配(A | B)”具有更好性能的替代方案?
答案 0 :(得分:1)
由此产生的正则表达式应尽可能接近:
~AB?C?[DEFG]*A?~
你的正则表达式生成器有很多简化要做,以摆脱以下几点:
{1}
:实际上没用,你可以从任何地方删除它(A*|B*)+
:严格等同于[AB]*
这是Regex101:https://regex101.com/r/Lc6Fx8/1
此外,如果您需要帮助修复Regex生成器,您应该发布一些有关它的信息。