4

私は Javascript で後ろ向きを真似ようとしていますが、

文字列「object.all」と一致させたいのですが、「object.call」と一致させたくありません。私はもう試した:

new RegExp('(?!(\\.))all')

しかし、両方の例が一致しています。私が望むのは、.(ドット) がすぐ後ろにあるかどうかをテストするために後ろを見るallことです。誰かが私の正規表現の何が問題なのか説明できますか?

前もって感謝します


これは良いです:

'object.all'.replace(new RegExp('(?!(\\.))all'), 'foo') 
// => object.foo

これについては、結果が「object.call」になることを期待しています:

'object.call'.replace(new RegExp('(?!(\\.))all'), 'foo')
// => object.cfoo
4

2 に答える 2

0

問題は、それがまだ先読みであるということです。そのため、ドットが「a」のすぐ後ろではなく、「a」と同じ場所にあるかどうかを確認します。

于 2012-09-27T19:50:59.990 に答える
0

これは複雑に思えますが、これで仕事が完了します。

function replaceAll(string, replacement) {
  var output = string.replace(/(\.)?all/g, function($0, $1) {
    return $1 ? $1 + replacement : $0;
  });
  return output;
}

var test1 = replaceAll("object.all", "foo");
var test2 = replaceAll("object.call", "foo");

console.log(test1); // object.foo
console.log(test2); // object.call

今年初めに取り組んでいたコードの一部で、@m.buettner が以前にコメントでリンクした記事 ( JavaScript でのルックビハインドの模倣 ) を使用しました。

于 2012-09-27T20:12:02.320 に答える