0

我有一个疯狂的正则表达式,我正在尝试运行它,它也接受所有语言字符和汉字字符。但是这需要很长时间,而且 99% 的时间只是挂起我的 UI。我对正则表达式真的很陌生。修复此正则表达式的任何帮助都会非常有帮助。谢谢。

RegExp = XRegExp("^(\\p{L}|[0-9\\n\\[\\]\\(\\)\\#\\*\\“\\-\\+\\\\\\/\\.\\s\\:\\_\\“\\”\\–\\?\\!\\,\\;\\'\\’\\‘\\"\\&\\¡\\¿\\«\\»\\„\\。\\、\\「\\」\\『\\』]|[\u3000-\u303F]|[\u3040-\u309F]|[\u30A0-\u30FF]|[\uFF00-\uFFEF]|[\u4E00-\u9FAF]|[\u2605-\u2606]|[\u2190-\u2195])+$")
4

1 回答 1

0

你不应该使用^(a|b|c)+$类似的模式,因为这里的回溯将比单纯的字符类更广泛。

您可以将所有单个字符模式合并、连接到单个字符类中:

var pattern = "^[-–\\p{L}0-9\n[\\]()#*+\\\\/.\\s:_“”?!,;'’‘"&¡¿«»„。、「」『』\\u3000-\\u303F\\u3040-\\u309F\\u30A0-\\u30FF\\uFF00-\\uFFEF\\u4E00-\\u9FAF\\u2605-\\u2606\\u2190-\\u2195]+$";

它会工作得更快。

此外,如果您使用它来允许"&作为char 序列,则需要将它们移出字符类:

var pattern = "^(?:&(?:quot|amp);|[-–\\p{L}0-9\n[\\]()#*+\\\\/.\\s:_“”?!,;'’‘¡¿«»„。、「」『』\\u3000-\\u303F\\u3040-\\u309F\\u30A0-\\u30FF\\uFF00-\\uFFEF\\u4E00-\\u9FAF\\u2605-\\u2606\\u2190-\\u2195])+$";
于 2020-12-14T11:00:25.227 回答