0

次の文字列があります

"content \" content <tag attr1=\"val1\" attr2=\"val2\">content \" content</tag> content \" content"

"タグ定義内のすべての文字'を useString.replace()関数で文字に置き換えたい。"タグ コンテンツ内の文字は、現在の形式のままにする必要があります。

"content \" content <tag attr1='val1' attr2='val2'>content \" content</tag> content \" content"

たぶん、いくつかのグループ化を使用した正規表現を使用できますか?

4

4 に答える 4

1

replace()とregex-callbackを使用して、これを行うことができます。

var str = 'content " content <tag attr1="val1" attr2="val2">content " content</tag> content " content';

function replaceCallback(match) {
    return match.replace(/"/g, "'");
}

str = str.replace(/<([^>]*)>/g, replaceCallback);

正規表現は、文字列内の文字とその間のすべてに<一致>し、一致をメソッドに渡します。メソッドは、必要に応じて、文字replaceCallback()に置き換えます。"'

編集:replaceCallback()を使用していました.replace('"', "'")が、これは最初のを置き換えるだけ"です。代わりに正規表現置換を使用するように更新しましたが、希望どおりに機能するようになりました。

于 2012-08-09T16:31:27.240 に答える
1
var str = "content \" content <tag attr1=\"val1\" attr2=\"val2\">content \" content</tag> content \" content";

var replaced = str.replace(/\<.*?\>/g, function(match, index){ 
  return match.replace(/"/g, "'"); // `match` will be each tag , both opening and closing. 
});
于 2012-08-09T16:38:37.890 に答える
1

正規表現を 1 つだけ使用することはできません。組み合わせを使用する必要があります。これが行く方法です:

  1. タグ内のテキストを一致させます。これは簡単です。
  2. 前の一致の出力からの文字を、replace を使用して必要な文字に置き換えます。前の一致が完了したので、これも簡単です。

敬礼!あなたが何であれ。

于 2012-08-09T16:38:41.520 に答える
1

次のコード (この質問に対する受け入れられた回答から取得) も、コールバックなしで機能しますが、正規表現が理解しにくいものです。

var str = 'content " content <tag attr1="val1" attr2="val2">content " content</tag> content " content';
str = str.replace(/"(?=[^<]*>)/g, "'");
于 2012-08-09T16:37:14.000 に答える