共享日常收集JS正则表达式(JavaScript regular expres

RegExp直接量和对象的创建

就像字符串和数字一样,程序中每个取值相同的原始类型直接量均表示相同的值,这是显而易见的。程序运行时每次遇到对象直接量(初始化表达式)诸如{}和[]的时候都会创建新对象。比如,如果在循环体中写var a = [],则每次遍历都会创建一个新的空数组。正则表达式直接量则与此不同,ECMAScript 3规范规定,一个正则表达式直接量会在执行到它时转换为一个RegExp对象,同一段代码所表示正则表达式直接量的每次运算都返回同一个对象。ECMAScript 5规范则做了相反的规定,同一段代码所表示的正则表达式直接量的每次运算都返回新对象。I E一直都是按照EC-MAScript 5规范实现的,多数最新版本的浏览器也开始遵循EC-MAScript 5,尽管目前该标准并未全面广泛推行。

1.1直接量字符

正则表达式中的所有字母和数字都是按照字面含义进行匹配的。JavaScript正则表达式语法也支持非字母的字符匹配,这些字符需要通过反斜线(\)作为前缀进行转义。比如,转义字符\n用以匹配换行符。表10-1中列出了这些转义字符。

表10-1:正则表达式中的直接量字符

字符 匹配
字母和数字字符   自身  
\o   NUL字符(\u0000)  
\t   制表符(\u0009)  
\n   换行符(\u000A)  
\v   垂直制表符(\u000B)  
\f   换页符(\u000C)  
\r   回车符(\u000D)  
\xnn   由十六进制数nn指定的拉丁字符,例如,\x0A等价于\n  
\uxxxx   由十六进制数xxxx指定的Unicode字符,例如\u0009等价于\t  
\cX   控制字符^X,例如,\cJ等价于换行符\n  
在正则表达式中,许多标点符号具有特殊含义,它们是:^ $ . * + ? = ! : | \ / ( ) [ ] { }

正则表达式“/\/”用以匹配任何包含反斜线的字符串。

1.2字符类

例如,/[\u0400-\u04FF]/用以匹配所有的Cyrillic字符)。

表10-2:正则表达式的字符类

字符 匹配
[...]   方括号内的任意字符  
[^...]   不在方括号内的任意字符  
.   除换行符和其他Unicode行终止符之外的任意字符  
\w   任何ASCII字符组成的单词,等价于[a-zA-Z0-9]  
\W   任何不是ASCII字符组成的单词,等价于[^a-zA-Z0-9]  
\s   任何Unicode空白符  
\S   任何非Unicode空白符的字符,注意\w和\S不同  
\d   任何ASCII数字,等价于[0-9]  
\D   除了ASCII数字之外的任何字符,等价于[^0-9]  
\b   退格直接量(特例)  

注意,在方括号之内也可以写这些特殊转义字符。比如,由于\s匹配所有的空白字符,\d匹配的是所有数字,因此/[\s\d]/就匹配任意空白符或者数字。注意,这里有一个特例。下面我们将会看到转义符\b具有的特殊含义,当用在字符类中时,它表示的是退格符,所以要在正则表达式中按照直接量表示一个退格符,只需要使用具有一个元素的字符类/[\b]/。

1.3重复

我们在正则模式之后跟随用以指定字符重复的标记。由于某些重复种类非常常用,因此就有一些专门用于表示这种情况的特殊字符。例如,“+”用以匹配前一个模式的一个或多个副本。表10-3总结了这些表示重复的正则语法。

表10-3:正则表达式的重复字符语法

字符 含义
{n,m}   匹配前一项至少n次,但不能超过m次  
{n,}   匹配前一项至少n次  
{n}   匹配前一顶n次  
?   匹配前一项0次或者1次,也就是说前一项是可选的,等价于{0,1}  
+   匹配前一项1次或多次,等价于{1,}  
*   匹配前一项0次或多次,等价于{0,}  

这里有一些例子:

/\d{2,4}/ // 匹配2~4个数字

/\w{3}\d?/ // 精确匹配三个单词和一个可选的数字

/\s+java\s+/ // 匹配前后带有一个或多个空格的字符串"java"

/[^(]/ // 匹配一个或多个非左括号的字符

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wjpdss.html