3

$ を使用して入力の終わりに一致させると、他の場所では長さゼロの一致が得られますが、WebKit との一致の証拠はありません。

function showBug() {
  Result = "the end.".replace( /(end\.)([\s]|$)?/img, makeChange );
  return;
  }
function makeChange() {
  for ( var i = 0; i < arguments.length; i += 1 ) {
    document.write( "arg" + i + " -->" + arguments[ i ] + "<--"  + "<BR>" );
    }
  }               

与える

arg0 -->end.<--
arg1 -->end.<--
arg2 -->undefined<--
arg3 -->4<--
arg4 -->the end.<--

のためAppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.5 Safari/534.55.3に、またのためにAppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.162 Safari/535.19

Opera ( Presto/2.10.229 Version/11.62)、FF ( Gecko/20100101 Firefox/10.0.2)、IE ( MSIE 8.0; Trident/4.0) はすべて

arg0 -->end.<--
arg1 -->end.<--
arg2 --><--
arg3 -->4<--
arg4 -->the end.<--

これは、$2 で一致を検出できることを意味します (実際には、URL の末尾のドットを URL の一部ではないと解釈することです)。私は現在、WebKit の末尾のスペースを追加し、後でそれを削除していますが、誰かがより良い解決策を持っているかどうか疑問に思っており、これをバグとして提起する必要があることを確認できます。

4

1 に答える 1

0

空の文字列に一致させたい場合は、キャプチャ グループ内に疑問符を含める必要があります。

/(end\.)((?:\s|$)?)/

その理由は、何もキャプチャしないグループは、空の文字列をキャプチャするグループと同じではないためです。たとえば、次の例で 2 番目の括弧が何をキャプチャするかを考えてください。

/a(b(x))?c/.exec('ac');   
于 2012-06-09T11:55:22.130 に答える