var = invert ('HTMLBody ("Love"s ");');
等しいまま:
を使用して、 内でのみinvert
と多かれ少なかれ同じままにします。\
HTMLBody
var = invert ('HTMLBody ("Love\"s ");');
\
var を中に入れたいのですが、関数内HTMLBody
に\
あるものだけを引用符で囲むことはできませんHTMLBody
var
機能は何invert
ですか? 正規表現を使用していますか?
var = invert ('HTMLBody ("Love"s ");');
等しいまま:
を使用して、 内でのみinvert
と多かれ少なかれ同じままにします。\
HTMLBody
var = invert ('HTMLBody ("Love\"s ");');
\
var を中に入れたいのですが、関数内HTMLBody
に\
あるものだけを引用符で囲むことはできませんHTMLBody
var
機能は何invert
ですか? 正規表現を使用していますか?
スニペットは少なくとも部分的に PHP から生成されたものであると述べたので、結果を後で修正しようとするよりも、スニペットが適切に生成されるようにそのコードを修正する方が正直なところ良いでしょう。
[編集] たとえば、次のように開始した場合:
$functionName = 'HTMLBody';
$arguments = array('Love"s ');
json_encode()
それぞれ次$argument
のことができますarray_map()
:
$encodedArgs = array_map('json_encode', $arguments);
次に、 と を結合し、$functionName
もう一度$encodedArgs
JSON としてエンコードしてString
、コードのリテラルを生成します。
echo json_encode( $functionName . '( ' . implode(', ', $encodedArgs) . ' )' );
これはecho
次のようにする必要があります ( demo ):
"HTMLBody( \"Love\\\"s \" );"
コメントの例では、開始値は次のようになります。
$functionName = 'functionjsalert';
$arguments = array('type"s" here', 'value"s here');
結果は ( demo ):
"functionjsalert( \"type\\\"s\\\" here\", \"value\\\"s here\" )"
正規表現でこれを実現するには、文字列をある程度正規化する必要があります。
したがって、エスケープされていない引用符が多すぎるにもかかわらずfunction
、単一のString
引数を持つ呼び出しの形式に常に従う場合:
functionName (" stringValue ");
注: String
of コードに複数の引数が含まれている場合、これは不可能です。"
a が値の一部であるか、値を区切ることになっている場合を認識する信頼できる方法はありません。
ただし、次のように動作するはずです。
function invert(snippet) {
return snippet.replace(/(\w+\s*\(\s*\")(.*?)(\"\s*\)\s*;)/, function (_, pre, sub, post) {
return pre + sub.replace(/(")/g, '\\$1') + post;
});
}
var result = invert('HTMLBody ("Love"s ");');
console.log(result); // HTMLBody ("Love\"s ")
最初の RegExp は 3 つの個別の部分に一致します。
(\w+\s*\(\s*\")
関数名、左括弧、および最初の二重引用符に一致します
pre === 'HTMLBody ("'
(.*?)
前のグループと次のグループの間のすべてに一致します
sub === 'Love"s '
(\"\s*\)\s*;)
最後の二重引用符、右括弧、およびセミコロンに一致します
post === '");'
次に、2 番目の RegExp は単純に中間グループ を検索し、sub
それらの前に"
a を配置\
します。
また、invert
既に存在し、別の目的を果たしている場合は、必要に応じてこの関数の名前を変更します。