我需要一个字符串来匹配几个模式中的一个。什么被认为是更好的做法?在交替运算符|
的帮助下组合模式:
const regexp = /(width)-(\d+)$|(height)-(\d+)$/
const matches = regexp.exec(string);
或者使用不同的模式多次执行正则表达式:
const regexp = /(width)-(\d+)$/
const regexp2 = /(height)-(\d+)$/
let matches = regexp.exec(string);
let matches2 = regexp.exec(string);
我喜欢的是,当多次执行正则表达式时,结果数组将始终具有相同的结构,而使用组合模式时,匹配高度和宽度<的结果会有所不同/ strong>因为宽度将匹配前两个捕获括号,但高度最后两个。
例如,如果字符串为width-20
,则结果为:
[ 'width-20',
'width',
'20',
undefined,
undefined,
index: 0,
input: 'width-20'
]
对于height-20
:
[ 'height-20',
undefined,
undefined,
'height',
'20',
index: 0,
input: 'height-20'
]
但从性能的角度来看,更好的方法是什么?
答案 0 :(得分:0)
首先我认为第一个选项更快但是经过1E6
迭代的一些测试后,我得出结论,在RegExp中使用OR较慢 ~30-40%
能够在75-99ms内解决100万次迭代
const regexp = /(width)-(\d+)$/
const regexp2 = /(height)-(\d+)$/
let matches = regexp.exec(string);
let matches2 = regexp.exec(string);
能够在120-140ms内解决100万次迭代
const regexp = /(width)-(\d+)$|(height)-(\d+)$/
const matches = regexp.exec(string);
修改
使用@nnnnnn赋予的第三个选项:
能够在110-125ms内解决100万次迭代
const regexp = /(width|height)-(\d+)$/
const matches = regexp.exec(string);