首页 > 语言 > JavaScript > 正文

总结JavaScript的正则与其他语言的不同之处

2024-05-06 14:52:34
字体:
来源:转载
供稿:网友

前言

最近发现JavaScript中的正则在某些地方的表现和其他语言或工具中的正则有些不同,比较另类.虽然你几乎不可能写出也几乎用不到下面我讲的这些正则,但是了解一下毕竟是好的.

本文中的代码示例都是在兼容ES5的JavaScript环境中执行的,也就是说,IE9之前版本,Fx4左右的版本,等,中的表现很有可能和我下面讲的不一样.

1.空字符类

不包含任何字符的字符类[]称之为空字符类(empty char class),我相信你没听别人这么叫过,因为在其他语言中,这种写法是非法的,所有的文档和教程都不会讲一种非法的语法.下面我演示一下其他语言或工具都是怎么报这个错的:

$echo | grep '[]'grep: Unmatched [ or [^$echo | sed '/[]/'sed:-e 表达式 #1,字符 4:未终止的地址正则表达式$echo | awk '/[]/'awk: cmd. line:1: /[]/awk: cmd. line:1: ^ unterminated regexpawk: cmd. line:1: error: Unmatched [ or [^: /[]//$echo | perl -ne '/[]/'Unmatched [ in regex; marked by <-- HERE in m/[ <-- HERE ]/ at -e line 1.$echo | ruby -ne '/[]/'-e:1: empty char-class: /[]/$python -c 'import re;re.match("[]","")'Traceback (most recent call last): File "<string>", line 1, in <module> File "E:/Python/lib/re.py", line 137, in match return _compile(pattern, flags).match(string) File "E:/Python/lib/re.py", line 244, in _compile raise error, v # invalid expressionsre_constants.error: unexpected end of regular expression

而在JavaScript中,空字符类是合法的正则组成部分,不过它的效果是"永不匹配",也就是匹配什么都会失败.相当于一个空否定正向环视(empty negative lookahead)(?!)的效果:

js> "whatever/n".match(/[]/g) //空字符类,永不匹配nulljs> "whatever/n".match(/(?!)/g) //空否定正向环视,永不匹配null

很显然,这种东西在JavaScript中没什么用.

2.否定空字符类

不包含任何字符的否定字符类[^]称之为否定空字符类(negative empty char class)或者叫空否定字符类(empty negative char class),都可以,因为这个名词是我"自创"的,和上面讲的空字符类类似,这种写法在其他语言中也是非法的:

$echo | grep '[^]'grep: Unmatched [ or [^$echo | sed '/[^]/'sed:-e 表达式 #1,字符 5:未终止的地址正则表达式$echo | awk '/[^]/'awk: cmd. line:1: /[^]/awk: cmd. line:1: ^ unterminated regexpawk: cmd. line:1: error: Unmatched [ or [^: /[^]//$echo | perl -ne '/[^]/'Unmatched [ in regex; marked by <-- HERE in m/[ <-- HERE ^]/ at -e line 1.$echo | ruby -ne '/[^]/'-e:1: empty char-class: /[^]/$python -c 'import re;re.match("[^]","")'Traceback (most recent call last): File "<string>", line 1, in <module> File "E:/Python/lib/re.py", line 137, in match return _compile(pattern, flags).match(string) File "E:/Python/lib/re.py", line 244, in _compile raise error, v # invalid expressionsre_constants.error: unexpected end of regular expression$            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选