我有一个带有这种字符串的变量: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对象的变量保存到数据库中,所以当我解析字符串时出现错误。
我做错了什么?请帮帮我。
答案 0 :(得分:4)
在.replace
之后(或者几乎任何其他字符串操作方法)之后会返回一个新字符串,因为字符串是"immutable" objects(一旦创建就无法修改)。您的代码假定操作发生在"就地"。您需要捕获新字符串(顺便提一下,您使用.trim()
操作)。
在以下代码中:
.trim()
上调用第一个str
,它会复制str
中的字符串但没有前导和尾随空格,然后返回该新字符串。.replace()
,它会复制剪裁后的字符串,但会替换字符,然后返回一个新字符串。
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)
var a = str.split("\"");
var newS=""
for(var i = 0; i<a.length; i++){
if(a[1]!= ""){
newS = newS + a[i];
}
}
return newS;
这比正则表达式运行得慢但是完成了工作。