Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.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 nodejs中的正则表达式测试失败?_Javascript_Node.js_Regex - Fatal编程技术网

Javascript nodejs中的正则表达式测试失败?

Javascript nodejs中的正则表达式测试失败?,javascript,node.js,regex,Javascript,Node.js,Regex,我有两个句子需要比较并得出结果。下面列出了这些句子 var msg = "Hi this is LT ~ ! @ # $ % ^ & * ( ) _ - + = { [ } ] | \\ : ; \" ' < , > . ? / End {#val#}" var msg2 = "Hi this is LT ~ ! @ # $ % ^ & * ( ) _ - + = { [ } ] | \\ : ; \" ' &

我有两个句子需要比较并得出结果。下面列出了这些句子

var msg = "Hi this is LT  ~ ! @ # $ % ^ & * ( )  _ - + = { [ } ] | \\ : ; \" ' < , > . ? / End {#val#}"
var msg2 = "Hi this is LT  ~ ! @ # $ % ^ & * ( )  _ - + = { [ } ] | \\ : ; \" ' < , > . ? / End 123"

它正在失败。我对val和pace没有问题,但如果我在句子中添加特殊字符,只会给出失败结果。

在脚本末尾,这是
msg
的值:

Hi\s*this\s*is\s*DLT\s*test\s*~ !\s*@ \#\s*\$\s*% \^\s*& \*\s*\(\s*\)\s* _\s*\-\s*\+\s*= \{\s*\[\s*\}\s*\]\s*\|\s*\\\s*: ;\s*" '\s*< \,\s*> \.\s*\?\s*/ End\s*\{\#val\#\}
第一个不是第二个的有效正则表达式,因为

  • \{\\\\\\\\\\\\\}
    123
    不匹配(请改用:
    var分隔符=/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
    
  • msg2
    字符不应转义
请参见下面的工作示例:

var msg=“您好,这里是LT~!@$%^&*()u-+={[}]\ 124;\\:;”<,>。?/结束{#val}”
var msg2=“您好,这里是LT~!@$%^&*( )  _ - + = { [ } ] | \\ : ; \“'<,>。?/End 123”
//尝试为特殊字符添加转义字符
msg=msg.replace(/[-[\]{}()*+?,\\^$\\\\]]/g,'\\$&');
//仅当存在两个{val}时添加空格,否则更新\\s*(可以是多个空格,也可以没有空格)
msg=msg.replace(/(^ |.)\s($|.)/g,(x,g1,g2)=>(x==“}{”?x:g1+“\\s\*”+g2));
//将val替换为1,29(可以用最多29个字符代替val)
变量分隔符=/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\;
msg=msg.replace(分隔符,(x,y)=>y?y:“(\\S{1,29})”;
让regex=RegExp(“^”+msg+“$”);
//比较两句话

console.log(regex.test(msg2));//日志'true'
如果它是您的测试字符串,为什么还要转义
msg2
的特殊字符?我建议用于测试,这非常有用。
Hi\s*this\s*is\s*DLT\s*test\s*~ !\s*@ \#\s*\$\s*% \^\s*& \*\s*\(\s*\)\s* _\s*\-\s*\+\s*= \{\s*\[\s*\}\s*\]\s*\|\s*\\\s*: ;\s*" '\s*< \,\s*> \.\s*\?\s*/ End\s*\{\#val\#\}
Hi this is DLT test ~ ! @ \# \$ % \^ & \* \( \)  _ \- \+ = \{ \[ \} \] \| \\ : ; " ' < \, > \. \? / End 123