背景
只有当输入字符串还没有用双引号括起来时,我才需要用双引号包装JavaScript字符串。对于这个问题的目的"包裹"无论语法规则如何,都被认为是双引号的开头和结尾。
问题
什么是最好的方法(正则表达式?)将任何输入字符串(包括空字符串)包装在双引号中,同时避免重复包装?解决方案应该处理内部引号,假设它们已经被转义。
示例输入/结果:
输入:
Hello world
结果:
"Hello world"
输入:
"Hello world"
结果:
"Hello world"
输入:
A quick example says \"hello world\"
结果:
"A quick example says \"hello world\""
输入:
*empty string*
结果:
""
输入:
"Hi," he said, "How are you?"
结果:(考虑"包裹"):
"Hi," he said, "How are you?"
答案 0 :(得分:1)
简单而简单的方法就是测试第一个和最后一个字符:
var input = // whatever
var wrapped = input;
if ('"' === wrapped || !('"' === wrapped[0] && '"' === wrapped.slice(-1)))
wrapped = '"' + wrapped + '"';
(即使在空字符串上也是如此,因为''[0]
是undefined
而''.slice(-1)
是''
,这两种情况都不会导致if
条件出现问题。)
如果输入只是一个双引号字符,您没有说要做什么,但我假设输入'"'
输出为'"""'
。如果这不是你想要的,你可以修改上面的代码。
答案 1 :(得分:1)
我会避免使用正则表达式。我将从您的示例和评论中假设以下前提条件:
如果这些假设有效,问题就更简单了。只测试字符串是否以双引号开头(perforce不会被转义,因为它是第一个字符)以及它是否以未转义的双引号结束。如果只缺少一个,那么您的字符串不符合输入假设。如果两者都丢失了,请包裹字符串;如果两者都没有丢失,则字符串已经被包裹。
除了检查空字符串外,还必须检查一个完全由一个双引号组成的字符串。
答案 2 :(得分:0)
你猜对了。最好的海湾是使用正则表达式将字符串包裹在引号周围。如下所示: -
$("#aa").change(function() {
console.log("change in aa");
$("#candidateTextArea").attr("disabled", "disabled");
}
);
$("#bb").change(function() {
console.log("change in bb");
$("#candidateTextArea").attr("disabled", false);
}
);
function quoteMe() {
var inpStr = document.getElementById("input");
inpStr.value = '"' + inpStr.value.replace(/"/g, '') + '"'
document.getElementById("result").innerHTML = inpStr.value;
}
答案 3 :(得分:-1)
我首先接受字符串并替换双引号,然后添加。
var res = str.replace('"', '');
res = '"' + res + '"'