正则表达式

使用 String 类方法(如 indexOf() substr() substring() )代替正则表达式来实现基本字符串查找和提取。

可以使用正则表达式执行的某些操作也可以使用 String 类方法来完成。例如,要查找一个字符串是否包含另一个字符串,您可以使用 String.indexOf() 方法或使用正则表达式。但是,当 String 类方法可用时,它的运行速度比等效的正则表达式快且不需要创建其他对象。

如果需要对元素进行分组,但不需要在结果中隔离该组的内容,请使用非捕获组(“ (?:xxxx) ”)代替正则表达式中的(“ (xxxx) ”)组。

通常,在复杂性属于中等的正则表达式中,将表达式各部分组合到一起。例如,在以下正则表达式模式中,括住文本“ab”的括号创建了一个组。因此,“+”限定符应用于该组,而不是单个字符:

/(ab)+/

默认情况下,“捕获”每个组的内容。作为执行正则表达式的结果的一部分,您可以在您的模式下获取各个组的内容。捕获这些组结果需要较长的时间并且需要占用更多内存,因为要创建将包含组结果的对象。作为一种替代方法,您可以使用非捕获组语法,即在左括号后包含一个问号和冒号。该语法指定这些字符作为一个组,但不会被捕获以获得结果:

/(?:ab)+/

与使用标准组语法相比,使用非捕获组语法速度更快且占用的内存更少。

如果某正则表达式执行性能很差,考虑使用其他正则表达式模式。

有时,可使用多个正则表达式模式进行测试或标识相同的文本模式。出于各种不同的原因,某些模式的执行速度比其他备用方法快。如果您确定是正则表达式导致代码的运行速度没有达到必需的速度,请想出可获得相同结果的替代正则表达式模式。测试这些替代模式,以确定哪个运行速度最快。