为什么Javascript string.replace(“ \ n \ t”,“ xxx”)将“ \ n \ t”替换为“ \ nxxx”?

时间:2019-05-23 10:37:23

标签: javascript regex control-characters

我希望在LIMIT 1文件中将SELECT t1.c1, t1.c2 FROM elbat t1 WHERE NOT EXISTS (SELECT t2.c2 FROM elbat t2 WHERE t2.c1 > t1.c1) OR (SELECT t2.c2 FROM elbat t2 WHERE t2.c1 > t1.c1 ORDER BY t2.c1 LIMIT 1) <> t1.c2; 替换为"\n\t"

"xxx"

我这样做:txt 方法匹配所需的部分,但保留"数字多功能光盘 DVD shùzì" 部分,仅将str.replace("\n\t","xxx")替换为\n。为什么?

为什么在\t中使用'xxx'时,它的工作原理类似于魅力,但在代码中却没有。

1 个答案:

答案 0 :(得分:1)

首先,str.replace("a","b")仅替换JavaScript中的第一个匹配项。要替换所有它们,您需要使用带有g修饰符的正则表达式。因此,您可以先尝试str.replace(/\n\t/g,"xxx")

接下来,为什么它在VSCode中起作用?在VSCode正则表达式中,\n匹配在VSCode应用程序右下角选择的任何换行序列。在这种情况下,它可以在PCRE,Java,Onigmo等中用作\R

由于可能有许多行结束序列,您可以考虑将VSCode \n“转换”为(?:\r\n|[\r\n\x0B\x0C\x85\u2028\u2029]),以匹配任何单个Unicode换行序列并使用

s = s.replace(/(?:\r\n|[\r\n\x0B\x0C\x85\u2028\u2029])\t/g, '')