帮助理解并重新编码javascript函数以处理特殊字符

帮助理解并重新编码javascript函数以处理特殊字符,javascript,Javascript,我正试图重写一个javascript函数,因为有人告诉我这个函数的代码有点令人讨厌,一个非常友好的用户可以在这里很好地编写它 我一直试图理解函数的功能,因此我可以正确地重写它,但由于我不完全理解它是如何工作的,这是一项非常困难的任务 因此,我正在寻求帮助和指导(而不是我想自己学习的解决方案),以便更好地理解和重写此函数 这个函数是用来处理特殊字符的,我知道它循环遍历发送给它的字符串,搜索特殊字符,并向字符串中添加它需要的内容以使其成为有效字符串 我一直在尝试使用value.replace(/“/

我正试图重写一个javascript函数,因为有人告诉我这个函数的代码有点令人讨厌,一个非常友好的用户可以在这里很好地编写它

我一直试图理解函数的功能,因此我可以正确地重写它,但由于我不完全理解它是如何工作的,这是一项非常困难的任务

因此,我正在寻求帮助和指导(而不是我想自己学习的解决方案),以便更好地理解和重写此函数

这个函数是用来处理特殊字符的,我知道它循环遍历发送给它的字符串,搜索特殊字符,并向字符串中添加它需要的内容以使其成为有效字符串

我一直在尝试使用value.replace(/“/gi,”/”),但在它崩溃时,我肯定是做错了

谁能告诉我从哪里开始重新编码功能

任何帮助都将不胜感激

我对这个功能的评论是用大写字母写的。 代码


函数转换字符串(值){

对于(var z=0;z,代码似乎在对字符串进行某种转义。在第一个循环中,它将
\
的所有实例替换为
\
,除非它们位于
\r\n
\n
序列之前,在这种情况下它跳过它们。第二个循环将
替换为
\”
,正如评论所说。不过,我不完全清楚为什么它要避开单独的反斜杠,而只留下新行

我想让你困惑的是,反斜杠字符是一个转义字符:它删除了以下字符的任何特殊含义。例如,如果我想在我的代码中使用字符串
,这是一个“字符串”
,我会这样写:

var foo = "this is a \"string\"";
本例中的转义字符阻止
字符终止字符串(因为它们是字符串的一部分)。当然,如果您希望字符串中有一个实际的反斜杠,则需要用另一个反斜杠转义,例如:

var foo = "this is a file path: C:\\bar\\some-file.txt";
类似地,
\r
\n
分别表示回车符和换行符。在Windows平台上,
\r\n
用于新行,而在Linux平台上,
\n
用于新行

有关和的更多信息,请参阅维基百科

为了回答您关于为什么将4和2添加到
z
的问题,在每种情况下,增量都对应于被跳过的字符数。
“\\n”
字符串文字具有值
\n
,即两个字符,因此将2添加到
z
。类似地,
”\\r\\n“
是四个字符,因此将4添加到
z


很抱歉,如果我把棍子的一端弄错了!

好的,让我们一步一步来完成

//如果当前字符是 反斜杠| |为什么要检查 \、\r\n和\n

\是一个特殊字符,称为“.\”,\r和\n都是。还有其他几个字符,但这些都是您要处理的。如果查找最后一个链接,您将看到\是用于添加反斜杠的转义序列。由于\本身是转义字符,向字符串添加\需要添加两个。它对所有gro都是这样做的只要转义序列不是换行符(\n),也不是windows换行符,\r\n,则ups为2。当以后使用字符串时,\n将在输出中成为一个\n

//为什么要在这里面加4到Z 案子

在其他两个IFS中,脚本添加4和2到Z的原因是因为它已经确定了该长度的转义序列,因此不需要检查序列中的其他字符。例如,考虑字符串“AAABAACAAAA”< /P> 如果我想使用相同的方法,逐个字符循环,并将A的所有实例更改为D,那么我可能会这样做:

for (i = 0; i < myString.length; i++) {
    if (myString.substring(i) == 'A') {
        myString = myString.substring(0, i) + 'D' + myString.substring(i+1, myString.length);
    }
}

@威尔:非常感谢,我真的很感谢你的回答,你说得对+1@sberry:这正是我所需要的,非常感谢您花时间向我解释,我现在非常理解。再次。非常感谢您的完整回答。+1:-)@斯贝里:对不起,只是检查一下,为什么我看不到第二次警报的输出?再一次,谢谢。
for (i = 0; i < myString.length; i++) {
    if (myString.substring(i) == 'A') {
        myString = myString.substring(0, i) + 'D' + myString.substring(i+1, myString.length);
    }
}
for (i = 0; i < myString.length; i++) {
    if (myString.substring(i, i+3) == 'AAA') {
        myString = myString.substring(0, i) + 'DDD' + myString.substring(i+3,myString.length);
        i+= 3;
    }
}
var testString = "This is a \"string\" with \"escape sequences\".\nIt \"escapes\" backslashes like this \\ and double quotes like this \" but leaves new lines alone";
alert(testString);
alert(convertString(testString));