Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/468.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正则表达式中?_Javascript_Regex - Fatal编程技术网

[|\|\.]的含义是什么?在Javascript正则表达式中?

[|\|\.]的含义是什么?在Javascript正则表达式中?,javascript,regex,Javascript,Regex,我有一个js代码: /^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/ 但是[\u124;\\ u124;\.]?(js regexp)的含义是什么?如果我们使用这样的资源,我们可以可视化此正则表达式: 由此我们可以得出结论,[124;\ 124;\.]需要“124;”、“|”或“.”中的一个。我们还可以看到,“|”和“|”的双重声明是不必要的。因此,可以

我有一个js代码:

/^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/
但是
[\u124;\\ u124;\.]
?(js regexp)

的含义是什么?如果我们使用这样的资源,我们可以可视化此正则表达式:

由此我们可以得出结论,
[124;\ 124;\.]
需要“124;”、“|”或“.”中的一个。我们还可以看到,“|”和“|”的双重声明是不必要的。因此,可以将此段缩短为
[|]
,以获得相同的结果


事实上,我们甚至可以使用诸如Regexper之类的资源来可视化。它匹配管道字符、下划线或句点。
然而,这是不必要的复杂。这可能更简单

它可以缩短为这个
[|.]

是一个非常好的工具 理解正则表达式

Char class [_|\_|\.] 0 to 1 times [greedy] matches:

[_|\_|\. One of the following characters _|_|.
 [_|\_|\.] requires one of either "_", "|" or "."
请参见此处的RegEx101链接
[\\\\\\\\\.]
可能与下划线(
)或句点(
)匹配,并且应该写为
[\.]

我相当肯定作者使用管道(
|
)来表示“或”(即),这在一个文件中是不必要的。正如其他回复者所说,这个管道实际上与字面上的管道相匹配,但我不相信这是作者的意图。这是初学者经常犯的错误

点(
)是另一个特殊字符,当它出现在字符类中时,它将失去其特殊意义。没有必要像作者那样用反斜杠来逃避它,尽管它没有害处。下划线从来没有任何特殊意义;我甚至不想猜测作者为什么列出了两次,一次加反斜杠,一次不加反斜杠

你没有问过,但是
也不属于那里。这就是为什么正则表达式如此低效的原因,就像。其思想是匹配一个或多个字母数字,然后可选地匹配一个分隔符(点或下划线),后面必须跟一些字母数字,根据需要重复。我会这样写:

[a-zA-Z0-9]+([_.][a-zA-Z0-9]+)*

如果它用完了字母数字,而下一个字符不是
\uu
,它将跳过整个部分并尝试匹配下一部分。如果它不能做到这一点,它可以立即纾困,因为不可能匹配。但是按照正则表达式的编写方式,分隔符是可选的,与它应该分隔的内容无关,这使得它毫无用处。正则表达式引擎必须不断地备份,试图匹配它已经在无休止、毫无意义的组合中使用的字符,然后才能放弃。不幸的是,这是另一个常见的错误。

这是胡说八道,它是一个字符类,意思是
match\uuuu或| or.
0或一次。它可以被缩短为
[|.]?
,但我怀疑这是它的作者的意图。正则表达式是,并且将执行得很差。例如,在
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@a.a
:。除此之外,它不支持所有有效的域(如完整的Unicode)、TLD(如博物馆)或电子邮件名称(如
email)+tag@example.com
)。你可以找到更好的模式。我的工作不是修复他的代码。我告诉他,他问我那块regex做了什么,我不想让他觉得我很刻薄,但我回答了他的问题。其他人已经说过正则表达式可以缩短,那么我为什么也要这样做呢。顺便说一句,我更新了我的答案,尽管在本页其他地方回答了4次。由于它用方括号括起来,
不需要转义
[|.]
也可以。多可爱啊,有人删除了他们的评论,所以我看起来像个白痴。为什么在评论发表这么长时间后就可以删除它们?