【问题标题】:Escape quotes on string javascript [duplicate]字符串javascript上的转义引号[重复]
【发布时间】:2018-03-01 20:20:25
【问题描述】:

我有一个带有这种字符串的变量: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 对象一起保存到数据库中,因此当我解析字符串时出现错误。

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

【问题讨论】:

  • 字符串变量是不可变的,您需要存储replace 函数的结果。类似于s = s.replace(....)
  • s = s.replace(/"/g,"");

标签: javascript escaping quotes


【解决方案1】:

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

在以下代码中:

  1. 首先在str 上调用.trim(),它复制str 中的字符串,但没有前导和尾随空格,然后返回该新字符串。
  2. 在该新字符串上,调用.replace(),它复制修剪后的字符串,但替换了字符,然后返回一个新字符串。
  3. 最后的字符串就是函数返回的内容。

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"', "\""));

【讨论】:

    【解决方案2】:

    @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;
    

    这比正则表达式运行得慢,但能胜任。

    【讨论】:

    • OP 已经在他的原始代码中使用了相同的 RegEx,所以人们会假设他理解它的作用。
    • regex101.com 将是了解 Regex @Vignesh Sriram 的绝佳资源
    猜你喜欢
    • 2019-03-17
    • 2013-04-06
    • 2013-03-12
    • 2012-05-28
    • 1970-01-01
    • 1970-01-01
    • 2011-02-08
    • 1970-01-01
    • 2023-04-09
    相关资源
    最近更新 更多