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