0

次のコードが与えられます:

alpha = ('"foo"="bar"').replace(/.*foo...([^"]*).*/, RegExp.$1)
beta = ('"bar"="baz"').replace(/.*bar...([^"]*).*/, RegExp.$1)

期待される出力は次のとおりです。

alpha is "bar"
beta is "bar"

実際の出力は次のとおりです。

alpha is ""
beta is "bar"

これが私をこの回避策に導きました:

var alpha = beta = "", n = "\n";

    ('"foo"="bar"').match(/.*foo...([^"]*).*/);
    alpha.toString.v1 = ('"foo"="bar"').replace(/.*foo...([^"]*).*/, RegExp.$1)

    String('"bar"="baz"').replace(/.*bar...([^"]*).*/);
    beta.toString.v2 = ('"foo"="baz"').replace(/.*foo...([^"]*).*/, RegExp.$1)

    
    document.body.innerText += alpha.toString.v1 + n + alpha.toString.v2;

後方参照を更新するために一致を必要とせずにこれを行うにはどうすればよいですか?

4

1 に答える 1

1

次のいずれかを使用できます。

// $1 = first backref, $2 = 2nd on through $9
// (*)I'm not sure but I think "$10" gets replaced with "backref1"+"0"
alpha = subject.replace(regex, "$1 $2 ... $N");

*:少しテストした後、何が一致するかによって異なります。9日以降にバックリファレンスがある場合は、正しいバックリファレンスが返されます。ただし、backrefが存在しない場合は、上記のようにプリフォームされます: "backref1" + "0"

また:

alpha = subject.replace(regex, function(matchedText, backref1, backref2, ...) {
    return "replacement text";
});



属性値の一致を取得しようとしている場合:

alpha = '"foo"="bar"'.replace(/"([^"]+)"="([^"]*)"/g, function(matched, attr, value) {
    // matched = "foo"="bar"
    // attr = foo
    // value = bar
});

これがブラウザー内で行われている場合、ページに既に存在する要素から属性を取得するには、組み込みのDOM操作ハンドラーを使用することを強くお勧めします。

于 2012-11-18T00:01:56.443 に答える