Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么Javascript string.replace(";\n\t";,";xxx";)替换了"\n\t“;加上\nxxx";?_Javascript_Regex_Control Characters - Fatal编程技术网

为什么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
匹配,但事实并非如此:(。