如果尚未包装,则用双引号括住给定的输入字符串

时间:2016-12-09 03:45:07

标签: javascript regex string

背景

只有当输入字符串还没有用双引号括起来时,我才需要用双引号包装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?"

4 个答案:

答案 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 + '"'