Javascript 正则表达式长度

Javascript 正则表达式长度,javascript,regex,Javascript,Regex,你觉得使用长时间的正则表达式怎么样?这会影响性能吗 这是我的一个正则表达式:(blockquote把它搞糟了,所以我编辑了它) (0-9[0-9[0-9[0-9[0-9[0-9[10-9]5 5 5 5 5 5 5 5 5 5 5 5[9-0-9[0-9 9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[9 7-9]5 5 5 5 5[5 5 5 5 5 5[5 5 5 5 5 5 5[5 5 5 5 5 5 5 5 5-9[[[[[[5 5 5 5-9[10-9[9[5 5

你觉得使用长时间的正则表达式怎么样?这会影响性能吗

这是我的一个正则表达式:(blockquote把它搞糟了,所以我编辑了它)

(0-9[0-9[0-9[0-9[0-9[0-9[10-9]5 5 5 5 5 5 5 5 5 5 5 5[9-0-9[0-9 9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[9 7-9]5 5 5 5 5[5 5 5 5 5 5[5 5 5 5 5 5 5[5 5 5 5 5 5 5 5 5-9[[[[[[5 5 5 5-9[10-9[9[5 5 5 5 5 5 5[3[3[5[5[5[3[5 5 5[5[5[5[3[5 5 5 5[5 5[3[5[5[5[5 5 5[5]]]]]]]]]]]]]]]]]]]]5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5|(()((0-9)(i)()()((0-9)()(i)(((i))()())((())))((()))))())(())()(-[0-0-9[0-0-9[0-9[0-9[0-9[10-9[10-9[10-9[10-9[10-9[10-9[10-9[5 5 5-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[9[10-9[10-9[10-9[10-9[10-9[9[5 5 5 5 5 5 5 5 5 5 5 5 5 5[5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5))))))5)))))))))除了除了除了除了除了除了除了除了除了除了[[[[[5 5 5 5 5 5 5 5-9 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7]]]]]]]カカカカカカカカカカカカカカカカカカカカカカカカカカカカカカカカカカカカカカカカカカカカカカカ(0-9 9[0-0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[9[0-9[9[10-9[9]7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7]]]]3 3[5 5 5 5 5 5 5 5 5[5 5 5 5 5 5 5 5 5[5 5 5 5 5 5 5 5 5 5 5[[[[[[[[[[3-9[3-9[3-9[3[3[3[3[5 5 5[3[3[5 5 5[3[5-9[3[3[3[3[3[3[3[3[3[3[3[3[3[5]]][0-9]| | | | | | | | | | | | | | | | | | | | | | | | | |(| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |*i) (10-0-9)我(3-0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[3 3-9[3-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[10-9[3[10-9[3]3]]3]我[[5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5)))))))))))))))))))))))))))))))))))))))))((((((((((((((([[[[[[[[[[[[[[[[10-9-9-9-9-10-10-10-10-10-3(3)()()()()([0-9]+)([0-9]+)([0-9]+[)))([((([0-9]+)([(-[0-9]+[))[+-]([0-9]*i)([0-9]*i]([(]-[0-9]*i[))((((([0-9]*i])))((([0-9]*i]))([-[0-9]*i])([-[0-9]+]([0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[9[9[9[5 5 5 5 5 5 5 5 5[5 5 5[5[5[5-9[10-9[3[3[3[5 5 5 5 5[3[3[5 5 5 5 5 5 5 5 5[5 5 5 5[5[3[3[3[3[5[3[5 5[3[5 5[5 5 5 5 5 5 5 5 5 5]]]]]]]]]3 3 3[5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5[5 5 5 5 5 5 5 5 5 5 5 5 5 5[5 5[5 5 5][0-9]*i[+/*-]([0-9]*i][-[0-9]*i][-]([0-9]*i][-]([0-9]*i][-]([0-9]*i][-[0-9]*i][-[0-9]*i][-[0-9]*i][-]-[0-0-9[0-9 9[0-9[0-9[10-9[10-9[10-9[10 10-9[10 10-9[10-9[10 10-9[10 10-9[5 5 5 5 5 5 5-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[10-9[5 5 5 5 5 5[5 5 5 5 5 5 5 5 5 5 5 5[5 5 5 5 5 5 5 5 5 5[9[5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5))))))7 7 7 7 7 7 7 7 7 7)))))))))除除除除除其他其他其他其他其他[[[0-9[7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7[[[[[7 7 7 7 7 7 7 7 7 7 7 7)(([0-9]*i)([(]-[0-9]*i[))[+-]([0-9]+)([(]-[0-9]+[))[)))([0-9]*i)([0-9]*i)([(]-[0-9]*i[)([0-9]+)([0-9]+)([0-9]+)([0-9]+]*i) (10-0-9)我(10-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[10-9[3-9[3-9[3-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[9[0-9[9]5 5 5 5 5]]3]3]3)5)5)5)除除除了除了除了除了除了除了除了除了除了除了除了除了除了[[[[[[[[[[[[[3]的[[[3]的[[3]的[[3]的[[[[3]没有没有没有没有没有没有没有没有没有没有没有没有没有没有没有没有没有没有没有没有没有没有没有没有没有没有没有没有没有没有没有没有没有没有没有没有没有没有没有[[[[[[[[3-9-9-9]的[10-9[0-9]+[)][+-]([0-9]*i)|([(]-[0-9]*i[)))(([0-9]*i)|([(]-[0-9]*i[)[+-]([0-9]+)|([(]-[0-9]+[)))[)([+/*-(((([0-9]-[0-9]*i])([0-9]-[1249]+]i])([-[1249]]])))(0-0-9 9 9 9 9 9-0-9[0-0-9 9[0-9]10-9[10-9 10-9 9[0-9[0-9[0-9[0-9[10-9[10-9[10-9[10-9[10-9 9 9 9 9-9[0-9[10-9].))))除除除除除除除除除除上述上述::::::::((((([0-0-9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9)5)九九九九(10)除除除除除除除除除除除除除除除上述上述上述上述(10-10-10-10-10-10-10-10-9九九九九九九九九九九九九九九九九九(0-9九九九九九九九九九九九九九九九九九九九九九九九九九九))[0-9]+[)))|((((([0-9]+)|([(]-[0-9]+[)))[+-]([0-9]*i)|([(]-[0-9]*i[))|(([0-9]*i)([([-[0-9]*i[)))+([0-9]+]|(0-0-9[0-0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[10-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[10[10-9[10-9[10-9[3]10 10 10 10 10 10[5]3]]10 10-9[10 10 10 10 10 10[10 10 10 10[10 10 10 10[10 10 10 10 10 10 10 10]]]本人本人本人[[10 10 10 10 10 10 10 10 10 10 10 10 10 10[5 5 5]]]]除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了除了[0-9]*i[([0-9]*i[)]([0-9]*i[))[+/*-]([0-9]*i)([(]-[0-9]*i[))[((([0-9]+)([([0-9]+])[+-]([0-9]*i]([0-9]*i])([0-9]*i])([0-9]*i])([0-9]-[i]](((0-9 9-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[0-9[10-9[10-9[10-9[10-9[10-9[10-9[10-9[10-9[10-9[10-9[10-9[9[9[5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5[5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5[9[10-9[10-9[10-9[10-9[10-9[10-9[10-9[9[9[9[9[9[9[9[9[9[9[9[9[9[([(]-[0-9]*i[))[+-]([0-9]+)|([(]-[0-9]+[))))[))))+)[))))[))))

我可以使用这个长度的RegExp吗?或者它是一种糟糕的做法

编辑 我正在构造复数计算器。这个正则表达式由较短的正则表达式组成。我就是这样做的:

    var regularExpression = new (function() 
{
    this.re = "(([0-9]+)|([(]-[0-9]+[)]))",
    this.im = "(([0-9]*i)|([(]-[0-9]*i[)]))",
    this.complexNumber = "[(]((-?"+ this.re + "[+-]" + this.im + ")|(-?" + this.im + "[+-]" + this.re +"))[)]",
    this.expression = "("+
                                                "(-?("+this.re+"|"+this.im+")[*/]("+this.im+"|"+this.re+"))|"+
                                                "(-?"+this.re+"[+-]"+this.im+"[+-]("+this.im+"|"+this.re+"))|"+
                                                "("+this.complexNumber+"[+/*-]("+this.complexNumber+"|"+this.im+"|"+this.re+"))|"+
                                                "(-?"+this.im+"[+/*-](" + this.im+"|"+this.complexNumber+"))|"+
                                                "(-?"+this.re+"[+/*-](" + this.re+"|"+this.complexNumber+"))"+
                                        ")",
    this.simpleExpression = "([(]("+
                                                        "("+this.expression+"([+/*-]("+this.expression+"|"+this.im+"|"+this.re+"|"+this.complexNumber+"))*)|"+
                                                        "(("+this.im+"|"+this.re+"|"+this.complexNumber+")([+/*-]"+this.expression+")+)"+
                                                    ")[)])"
})();
所以我的regularExpression.simpleExpression甚至更长,因为它很少使用表达式。这就是为什么我会问和担心


simpleExpression正在寻找这样的字符串:(12321-12231i+1233123*(12i-231)+12323-i)

当正则表达式以良好的方式编写时(肯定比基于条件的代码快得多)

然而,您应该问自己的问题是代码是否可维护和可读-将来可能有人必须重写代码的这一部分,甚至您可能在一段时间后第一眼就看不懂它


这里的第一点可能会回答您的问题:

我想说的第一件事是:这不利于代码的可读性和维护或调试。从性能的角度来看,我不知道这个表达式分为几个部分,并在注释中解释。我是从字符串构造的,所以可读性一点也不差。我看到了一些潜在的重复在你的正则表达式中的表达式。你能告诉我们这个很长的正则表达式应该做什么吗?它重复了很多。我正在构造复杂的计算器,这个表达式是由较短的表达式组成的。我将编辑我的问题。无法让它工作。也许你可以让它看起来更好一点,然后在这里编辑它?谢谢你的回答。Code易于维护,所以我坚持使用它。再次-谢谢!