用于GIT差异的JavaScript regexp

时间:2016-10-24 18:18:08

标签: javascript regex git

我正在处理需要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])

添加然后运行代码,它几乎立即完成(并成功匹配)。理想情况下,我的代码的第一个版本会像第二个版本一样快完成,所以我想知道为什么他们的执行时间如此不同。有人可以提供一些见解吗?提前谢谢。

0 个答案:

没有答案