#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
так как же это изменяет регулярное выражение, добавляя проверку на разрыв строки в объединенном регулярном выражении?