1

ここで、コメントの 1 つを使用して新しい質問を作成するように求められたので、ここにいます特定の単語内のフレーズのみを置き換えることができるかどうか疑問に思っていました。例: in を置き換えてinBABを置き換えCBABACないThanks!BABDABABCC

4

2 に答える 2

2

先読みを使用します:

BAB(?=AC)

説明

"BAB" +      // Match the characters “BAB” literally
"(?=" +      // Assert that the regex below can be matched, starting at this position (positive lookahead)
   "AC" +       // Match the characters “AC” literally
")"  

また

BAB(?!CC)

説明

"BAB" +      // Match the characters “BAB” literally
"(?!" +      // Assert that it is impossible to match the regex below starting at this position (negative lookahead)
   "CC" +       // Match the characters “CC” literally
")"  
于 2012-07-27T17:44:09.313 に答える
0

交換のロジックの根拠が何であるかは言わないので、これは一般化された答えです。

一部の人が言及したように、先読みを使用できますが、JavaScript の主な問題の 1 つは、後読みをネイティブにサポートしていないため、解決策の半分しかないことです。

後読みがない場合の一般的な回避策は、関心のあるビットの前にあるものを (アンカーするのではなく) 一致させてから、コールバックに再挿入することです。

fooのすべてのインスタンスをに置き換えたいとしましょうbar。ここで、その前に数字が続きます。

var str = 'foo 1foo1 foo2';
console.log(str.replace(/(\d)foo(?=\d)/g, function($0, $1) {
    return $1+'bar';
})); //foo 1bar1 foo1

そのため、簡単な部分には先読みを使用し、後読みの不足を補うためにコールバックを使用します。

書いたものを含め、JS には後読みの実装があり、肯定的または否定的な後読みが追加のパラメーターとして渡されます。これを使用すると、上記と同じ結果が得られます。

console.log(str.replace2(/foo(?=\d)/g, 'bar', '(?<=\\d)'));
于 2012-07-27T18:02:22.087 に答える