我正在处理需要JS正则表达式模式匹配的东西给定GIT diff字符串。下面是我的一些示例代码:
var diff = [
'diff --git a/index.txt b/index.txt',
'index 7e18d52..0c11620 100644',
'--- a/index.txt',
'+++ b/index.txt'
].join('\n')
var path = '(\\/)?([^\\/\0]+(\\/)?)+'
var regexp = [
'diff\\s\\-\\-git\\sa\\/' + path + '\\sb\\/' + path,
'index\\s\\w+\\.\\.\\w+\\s\\w+',
'\\-\\-\\-\\sa' + path,
'\\+\\+\\+\\sb' + path
].join('\\n')
regexp.test(diff)
当我运行代码时,它就在那里。在停止测试前我已经等了5分钟。但是,如果我将示例代码更改为如下所示:
var diff = [
'diff --git a/index.txt b/index.txt',
'index 7e18d52..0c11620 100644',
'--- a/index.txt',
'+++ b/index.txt'
]
var path = '(\\/)?([^\\/\0]+(\\/)?)+'
var regexp = [
new RegExp('diff\\s\\-\\-git\\sa\\/' + path + '\\sb\\/' + path),
new RegExp('index\\s\\w+\\.\\.\\w+\\s\\w+'),
new RegExp('\\-\\-\\-\\sa' + path),
new RegExp('\\+\\+\\+\\sb' + path)
]
regexp[0].test(diff[0]) && regexp[1].test(diff[1]) && regexp[2].test(diff[2]) && regexp[3].test(diff[3])
添加然后运行代码,它几乎立即完成(并成功匹配)。理想情况下,我的代码的第一个版本会像第二个版本一样快完成,所以我想知道为什么他们的执行时间如此不同。有人可以提供一些见解吗?提前谢谢。