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
and $encodedArgs
,并再次编码为 JSON 以生成String
代码的文字:
echo json_encode( $functionName . '( ' . implode(', ', $encodedArgs) . ' )' );
这应该echo
如下(演示):
"HTMLBody( \"Love\\\"s \" );"
对于您评论中的示例,起始值为:
$functionName = 'functionjsalert';
$arguments = array('type"s" here', 'value"s here');
这应该导致(演示):
"functionjsalert( \"type\\\"s\\\" here\", \"value\\\"s here\" )"
要使用正则表达式完成此操作,字符串应该有点规则。
因此,如果它始终遵循function
带有单个String
参数的调用格式,尽管有太多未转义的引号:
函数名(“字符串值”);
注意:如果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 === '");'
然后第二个正则表达式简单地在中间组 , 中搜索sub
任何"
并在它们之前放置 a \
。
并且,如果invert
已经存在并用于其他目的,请根据需要重命名此函数。