JavaScript中的replace函数无法删除回车符

3
我有一个从csv文件生成的json对象:
{"FID":["FID"],"the_geom":["the_geom"],"X":["X"],"Y":["Y"],"ROW":["ROW"],"COL":["COL"],"EMH":["EMH"],"B":["B_SURF","B_SUB1","B_SUB2"],"BP_CA":["BP_CA_SUR","BP_CA_SUB1","BP_CA_SUB2"],"BP_K":["BP_K_SURF","BP_K_SUB1","BP_K_SUB2"],"BP_MG"["BP_MG_SUR","BP_MG_SUB1","BP_MG_SUB2"],"BP_NA":["BP_NA_SUR","BP_NA_SUB1","BP_NA_SUB2"],"CA"["CA_SURF","CA_SUB1","CA_SUB2"],"CAMG":["CAMG_SURF","CAMG_SUB1","CAMG_SUB2"],"CEC"["CEC_SURF","CEC_SUB1","CEC_SUB2"],"CLAY":["CLAY_SURF","CLAY_SUB1","CLAY_SUB2"],"CU"["CU_SURF","CU_SUB1","CU_SUB2"],"DPRR_SUMM":["DPRR_SUMM"],"DRAIN_SUMM"["DRAIN_SUMM"],"FE":["FE_SURF","FE_SUB1","FE_SUB2"],"K"["K_SURF","K_SUB1","K_SUB2"],"KMG":["KMG_SURF","KMG_SUB1","KMG_SUB2"],"MG"["MG_SURF","MG_SUB1","MG_SUB2"],"MN":["MN_SURF","MN_SUB1","MN_SUB2"],"NA":["NA_SURF","NA_SUB1","NA_SUB2"],"OM":["OM_SURF","OM_SUB1","OM_SUB2"],"P"["P_SURF","P_SUB1","P_SUB2"],"PAVL"["PAVL_SURF","PAVL_SUB1","PAVL_SUB2"],"PAW24_SUMM":["PAW24_SUMM"],"PAW30_SUMM"["PAW30_SUMM"],"PAW36_SUMM":["PAW36_SUMM"],"PAW42_SUMM":["PAW42_SUMM"],"PAW48_SUMM":["PAW48_SUMM"],"PH":["PH_SURF","PH_SUB1","PH_SUB2"],"RZFC_SUMM":["RZFC_SUMM"],"RZKUSAT_SU"["RZKUSAT_SU"],"RZPAW_SUMM":["RZPAW_SUMM"],"RZPWP_SUMM"["RZPWP_SUMM"],"RZSAT_SUMM":["RZSAT_SUMM"],"S":["S_SURF","S_SUB1","S_SUB2"],"SAND":["SAND_SURF","SAND_SUB1","SAND_SUB2"],"TEX"["TEX_SURF","TEX_SUB1","TEX_SUB2"],"THICK"["THICK_SURF","THICK_SUB1","THICK_SUB2"],"TIP":["TIP_SURF","TIP_SUB1","TIP_SUB2"],"ZN":["ZN_SURF","ZN_SUB1","ZN_SUB2"],"EMV"["EMV"],"ASP":["ASP"],"DEM":["DEM"],"SLOPE\r":["SLOPE\r"]}

最后,坡度对象的名称中有一个回车符(它是从csv转换中带来的)

我需要从对象中删除该回车符,因为它会破坏一些解析对象的其他脚本。

我尝试通过以下方式对其进行测试:

console.log("Without carrage return: " + JSON.stringify(jsonObject).replace(/[\n\r]/g, ''));

但是当我打印它时,它仍然包含回车符。

我可能在这里做了一些愚蠢的事情,只是太累了,没有注意到它。

非常感谢任何帮助!


1
尝试使用 replace(/\\r/g, '') - sigod
1
可能那并不是一个回车符,而是字符串\r - MinusFour
@MinusFour: JSON.stringify()会将控制字符转义成其转义序列表示形式。 如果输入包含字符串\r,则JSON将包含\\r,而.replace(/[\\r\\n]/g, '')将无法匹配它。 - cg909
@MaxZoom 我运行了一下 Lint,我明白你的意思了。我的实际字符串没问题,所以我想我在将其添加到问题时不小心删除了一些字符。 - Keith M
啊,好的。那我尝试使用它时发现了一些问题。 - MaxZoom
显示剩余2条评论
3个回答

5

您的正则表达式有些问题。因为 \ 也是一个特殊字符,所以您需要将其区分开来。

尝试使用以下方法:

console.log("Without carrage return: " + JSON.stringify(jsonObject).replace(/[\\n\\r]/g, ''));

您的正则表达式将\r字符作为整体匹配,但由于您将所有内容转换为字符串,因此您最终需要匹配'\'和'r'这两个字符。


2
正则表达式是正确的,但解释不正确。你没有转义特殊字符 \\,因为它是回车所必需的,但要匹配回车的字符串表示形式(而不是回车本身)。请参见此正则表达式以获得真正的CR匹配说明。 - MaxZoom

2
在正则表达式中,\r\n 匹配回车和换行符,但是 JSON.stringify() 会将回车符转换为 '\r'
因此,你只需要使用 \\r 而不是 \r
console.log("Without carrage return: " + JSON.stringify(jsonObject).replace(/\\n|\\r/g, ''));

编辑:/[\\n\\r]/g 可以匹配字符串中的每个反斜杠和每个字母 r 和 n,而不仅仅是序列 \r。 /\\n|\\r/g 更好地起作用。


1
也许csv中的\r实际上是反斜杠和r?
 console.log( JSON.stringify(jsonObject).replace("\\r", "") )

真不敢相信我没发现那个问题...我猜这就是因为只有5个小时的睡眠时间导致的截止日期 :) - Keith M
它只会删除第一个\r出现吗? - MaxZoom
实际上这部分是不正确的,正如@MaxZoom所问,它确实只会删除第一次出现的内容。 - Keith M

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接