Регулярное выражение JavaScript для GIT diff

#javascript #regex #git

#javascript #регулярное выражение #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 = '(\/)?([^\/] (\/)?) '

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 = '(\/)?([^\/] (\/)?) '

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]) amp;amp; regexp[1].test(diff[1]) amp;amp; regexp[2].test(diff[2]) amp;amp; regexp[3].test(diff[3])
  

Добавьте, затем запустите код, он завершится почти сразу (и с успешным совпадением). В идеале первая версия моего кода завершалась бы так же быстро, как и вторая версия, поэтому мне интересно, почему время их выполнения так отличается. Может ли кто-нибудь предложить некоторое представление? Заранее спасибо.

Комментарии:

1. Вы не можете просто соединить кучу выражений с помощью разрывов строк и ожидать, что они будут совпадать так же, как отдельные выражения, по крайней мере, без учета строк в вашем выражении (особенно в диапазонах и флагах регулярных выражений).

2. Но в git diff каждая строка разделяется разрывом строки n так как же это изменяет регулярное выражение, добавляя проверку на разрыв строки в объединенном регулярном выражении?