1

サー、私は javascript を使用してプロジェクトを行っていました。テキストを正規表現に置き換えたいです。段落内で、javascript を使用していくつかの単語を置き換えたいです。

例えば:

 var str =" Would you like to have responses to your questions |code Would you like to have responses to your questions code| Would you like to have responses to your questions  "

 var n=str.replace("to","2");

ここですべての " to " が置き換えられます。 |code to code|の間を削除したくありません。 誰か助けてください.....

4

2 に答える 2

1

この種のタスクでは正規表現に頼るべきではないと思います。複雑すぎて遅くなるからです。とにかく、式が正しい場合 (つまり、すべて"|code"の a"code|"があり、ネストされたcodeタグがない場合)、これを試すことができます。

var n = str.replace(/to(?!(?:\|(?!code)|[^\|])*code\|)/g, "2");

複雑なだけでなく、維持するのも大変です。このような場合に行う最善の方法は、文字列をチャンクに分割することです。

var chunks = [], i, p = 0, q = 0;
while ((p = str.indexOf("|code", p)) !== -1) {
    if (q < p) chunks.push(str.substring(q, p));
    q = str.indexOf("code|", p);
    chunks.push(str.substring(p, p = q = q + 5));
}
if (q < str.length) chunks.push(str.substring(q));

// chunks === [" Would you like to have responses to your questions ",
//             "|code Would you like to have responses to your questions code|",
//             " Would you like to have responses to your questions  "]

注:すべての の出現を置換するのでstr.replace("to", "2")なく"to"、最初の 1 つだけを置換します。

于 2012-06-09T09:56:29.240 に答える
0

すべての「to」を2に置き換えたい場合、これがコードになります

var str =" Would you like to have responses to your questions |code Would you like to have responses to your questions code| Would you like to have responses to your questions";
var n=str.replace(/to/g,"2");
于 2012-06-09T10:01:47.880 に答える