转义字符串javascript上的引号

时间:2018-03-01 20:20:25

标签: javascript escaping quotes

我有一个带有这种字符串的变量:4.5“x8.5”x0.5“

我找到了很多关于如何逃避引号的答案,所以我写了这个函数:

function replaceQuotesChars (str)
{
    var s = str.trim();

    // s.replace('"','"');

    // s.replace('"','\\"');

    // s.replace(/\"/g,'\\"');

    s.replace(/\"/g,'"');

    return s;
};

但这些都没有帮助我逃避引号,因为我得到了我提交给函数的相同字符串。

我将带有stringify对象的变量保存到数据库中,所以当我解析字符串时出现错误。

我做错了什么?请帮帮我。

2 个答案:

答案 0 :(得分:4)

.replace之后(或者几乎任何其他字符串操作方法)之后会返回一个新字符串,因为字符串是"immutable" objects(一旦创建就无法修改)。您的代码假定操作发生在"就地"。您需要捕获新字符串(顺便提一下,您使用.trim()操作)。

在以下代码中:

  1. .trim()上调用第一个str,它会复制str中的字符串但没有前导和尾随空格,然后返回该新字符串。
  2. 在新字符串上调用.replace(),它会复制剪裁后的字符串,但会替换字符,然后返回一个新字符串。
  3. 最后一个字符串是函数返回的字符串。
  4. 
    
    function replaceQuotesChars (str, delimeter) {
      // Each string operation returns a new string. Take that final
      // string and return it
      return str.trim().replace(/\"/g, delimeter);
    };
    
    console.log(replaceQuotesChars('10.5" x 4.75"', """));
    console.log(replaceQuotesChars('10.5" x 4.75"', "\'"));
    console.log(replaceQuotesChars('10.5" x 4.75"', "\""));
    
    
    

答案 1 :(得分:0)

@Scott Marcus已经回答了这个问题,但是如果你对使用正则表达式(像我这样)感到困惑,还有一种使用.split()方法的替代方法。

var a = str.split("\"");
var newS=""
for(var i = 0; i<a.length; i++){
    if(a[1]!= ""){
        newS = newS + a[i];
    }
}
return newS;

这比正则表达式运行得慢但是完成了工作。