Обратите внимание, что в этих строках текста слово "GARNSEY" объявлено дважды:
"GARNSEY B R & D B GARNSEY"
"GARNSEY B R & D GARNSEY"
Теперь это может быть D GARNSEY (без средней инициалы) или DB GARNSEY (включая среднюю букву), но мне нужно знать, упоминается ли GARNEY, потому что это означает, что фамилия упоминается дважды, один раз в начале и один раз в конце. *
Согласно книге Справочник программиста JavaScript:
"Вы можете повторить поиск этого точного символа по всему шаблону ... Вы можете сделать это с помощью \ 1. Использование \ 1 относится к результату первого сгруппированного выражения."
Хорошо, поэтому я пытаюсь «сохранить» результат первой группы \ w {1,}) \ 1, а затем пытаюсь повторно использовать его в конце, пытаясь также проверить, есть ли второе имя или нет:
/^(\w{1,})\1\s\w{1,}((?:\s\w{1,})?)+\s+&\s+\w{1,}\s(((?:\s\w{1,})?)+)\1$/;
Тем не менее, интерпретатор JavaScript предупреждает «не удалось» с помощью следующего простого теста:
(function(){
var checkChar = function(txt){
var regex = /^(\w{1,})\1\s\w{1,}((?:\s\w{1,})?)+\s+&\s+\w{1,}\s(((?:\s\w{1,})?)+)\1$/;
(regex.test(txt)) ? alert('passed') : alert('failed');
}
checkChar("GARNSEY B R & D B GARNSEY");
})()
Неужели я неправильно понимаю цель \ 1 и есть ли какое-либо решение сделать то, что я пытаюсь сделать, используя регулярное выражение, как показано выше? Спасибо за ответ.