为什么Javascript string.replace(";\n\t";,";xxx";)替换了"\n\t“;加上\nxxx";?
我希望在为什么Javascript string.replace(";\n\t";,";xxx";)替换了"\n\t“;加上\nxxx";?,javascript,regex,control-characters,Javascript,Regex,Control Characters,我希望在txt文件中将“\n\t”替换为“xxx”: "数字多功能光盘 DVD shùzì" 我这样做:str.replace(“\n\t”,“xxx”) 方法匹配所需的部分,但保留\n部分,只替换\t中的'xxx'。为什么 为什么在VSCOde中使用crtl+F时,它像charm一样工作,但在code中却不是。首先,str.replace(“a”,“b”)只替换JavaScript中的第一个出现。要替换它们,需要使用带有g修饰符的正则表达式。因此,您可以先尝试str.replace(/
txt
文件中将“\n\t”
替换为“xxx”
:
"数字多功能光盘 DVD shùzì"
我这样做:str.replace(“\n\t”,“xxx”)
方法匹配所需的部分,但保留\n
部分,只替换\t
中的'xxx'
。为什么
为什么在
VSCOde
中使用crtl+F
时,它像charm一样工作,但在code中却不是。首先,str.replace(“a”,“b”)
只替换JavaScript中的第一个出现。要替换它们,需要使用带有g
修饰符的正则表达式。因此,您可以先尝试str.replace(/\n\t/g,“xxx”)
接下来,为什么它在VSCode中工作?在VSCode正则表达式中,\n
匹配在VSCode应用程序右下角选择的任何换行序列。在本例中,它在PCRE、Java、ONIGOM等中充当\R
因为可以有很多行结束序列,您可以考虑“转换”VSCode <代码> \n>代码>到<代码>(.:\\r\\[\r\n\x0b\x0c\x85 \u2028 \u2029),匹配任何单unicode断线序列并使用
s = s.replace(/(?:\r\n|[\r\n\x0B\x0C\x85\u2028\u2029])\t/g, '')
换行符可以是
\r
、\n
或\r\n
。要替换所有这些选项,请使用str.replace(/(?:\r\n?|\n)\t/,“xxx”)代码>WTF!?我花了两个小时调试(你怎么知道的?谢谢搜索和内存?,,谢谢,我不知道。为什么VScode会这样做?它的逻辑是什么?@coobit可能,主要的一点是让正则表达式更加面向行,就像在Vim中一样。在VScode中,将换行符与正则表达式匹配一直是一件痛苦的事情。例如,默认情况下,[\s\s]
不匹配换行符,它只在添加\r
或\n
时起作用。我认为开发人员试图让他们的正则表达式实现“更智能”。事实上,这只会让用户感到困惑。如果您的文件行结尾是CRLF,我希望将它们与\r\n
匹配,但事实并非如此:(。