0

これらのテキスト文字列に「GARNSEY」という単語が2回宣言されていることに注目してください。

"GARNSEY B R & D B GARNSEY"
"GARNSEY B R & D GARNSEY"

これで、D GARNSEY(ミドルネームのイニシャルなし)またはDB GARNSEY(ミドルネームのイニシャルを含む)になりますが、GARNEYが言及されているかどうかを知る必要があります。これは、姓が最初と最後の2回言及されていることを意味します。

本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の目的を誤解していますか?上記のように、正規表現を使用して実行しようとしていることを実行するための解決策はありますか?返信ありがとうございます。

4

2 に答える 2

1

この正規表現は、名前があり、その後に任意の量のガベージが続き、同じ名前で終わるかどうかをテストします。

var re = /^(\w+)\b.+\b\1$/;
re.test( "GARNSEY B R & D B GARNSEY" ); // true
re.test( "GARNSEY B R & D GARNSEY" );   // true
re.test( "GARNSEY B R & D GURNSEY" );   // false
re.test( "GARNSEY B R & D ZGARNSEY" );  // false
于 2011-01-13T16:53:06.653 に答える
1

regexprの先頭にある\1を削除します。その後もパスは報告されませんが、それはおそらくregexprの他のエラーです。私はあなたのコードを単純化して多かれ少なかれ同じことをしようとしました:

(function(){
 var checkChar = function(txt){
var regex = /^(\w+)(\s\w+)+\s+&\s+(\w+\s)+\1$/;

  (regex.test(txt)) ? alert('passed') : alert('failed');

 }

 checkChar("GARNSEY B R & D B GARNSEY");
})()
于 2011-01-13T16:58:07.300 に答える