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