JavaScript定义正则表达式有两种方式。
1.RegExp构造函数
var pattern=new RegExp('[bc]at ',' I ');
它接收两个参数:一个是要匹配的字符串模式,另一个是可选的标志字符串。
2.文字量
var pattern=/[BC]at/I;
正则表达式的匹配模式支持三种标志字符串:
G:global,全局搜索模式,将应用于所有字符串,而不是在找到第一个匹配时停止搜索;
I:ingore case,忽略字母大小写,即在确定匹配项时忽略模式和字符串大小写;
m :多行,多行模式,即当搜索到达一行文本的末尾时,它会继续查找下一行是否有匹配。
创建正则表达式的两种方法之间的区别在于正则表达式文字总是共享同一个正则表达式实例,并且通过使用构造函数创建的每个新的正则表达式实例都是一个新实例。
元字符
元字符是具有特殊含义的字符。正则表达式的元字符主要包括:
([ { ^ $ | ) ?* .
元字符在不同的组合中有不同的含义。
预定义的特殊字符
字符类简单类
一般正则表达式的一个字符对应字符串的一个字符,但是我们可以用[]构造一个简单的类来表示一类满足某个特征的字符。例如:
[abc]您可以在方括号中匹配A、B、C或它们的任意组合的字符。
反向分类
既然[]可以构建一个类,那么它自然会与不包含括号中内容的对应类相关联。这个类叫做逆向类。例如,[ABC]可以匹配非A或B或c的字符
范围类
有时候逐个匹配字符太麻烦,匹配的类型也一样。这时,我们可以用'-'连接线来表示某一封闭区间之间的内容。例如,我们可以使用[a-z]来匹配所有小写字母,如下所示:
任何匹配0到9的数字都可以用[0-9]表示:
预定义的类
对于我们上面创建的类,正则表达式为我们提供了几个常用的预定义类来匹配常见字符,如下所示:
字符等价类的含义。[ n r]匹配除回车符和换行符以外的所有字符d [0-9]数字字符 d [0-9]非数字字符s [tnx0Bfr]空白字符 s[ r]
上述方法将字符一一匹配。如果一个字符连续出现多次,按照上述方法匹配会很麻烦。因此,我们想知道是否有其他方法可以直接匹配重复出现的字符。正则表达式为我们提供了一些量词,如下所示:
性格含义?出现零次或一次(最多一次)一次或多次(至少一次)*出现零次或多次(任何时间){n}出现n次{n,m}出现n到m次{n,}出现至少n次贪婪模式和非贪婪模式
对于{n,m},您要匹配n还是m?这就涉及到模式匹配的问题。默认情况下,量词是尽可能多的匹配字符,这称为贪婪模式,例如:
var num=' 123456789num.match(/d{2,4 }/g);//[1234],[5678],[9]和贪婪模式都是非贪婪模式,只需要加上“?”在量词之后。也就是说,例如{n,m}?即按照最少的字符数匹配,如下:
var num=' 123456789num.match(/d{2,4}?/g);//[12],[34],[56],[78]和[9]
量词只能多次匹配一个字符。如果我们要多次匹配某一组字符会怎样?正则表达式中的括号可以将字符串定义为一个组。
我们希望将apple这个词匹配4次,这样我们就可以匹配(apple){4},如下所示:
如果要匹配4个出现的苹果或橙色,可以插入管道字符“|”,例如:
(苹果|橙子){4}
如果在使用分组的正则表达式中有多个括号,即多个分组,则匹配结果也会对匹配项进行分组和编号,例如:
(苹果)d(橙色)
如果我们不想捕获某些组,我们只需要在组的括号前跟随一个问号和冒号,例如:
(?apple)d(橙色)
领土边界
正则表达式还为我们提供了几种常用的边界匹配字符,例如:
字符含义以xx $开头,以xx结尾b单词边界是指除[a-zA-Z_0-9]以外的字符B非单词边界,其中单词边界与一个位置相匹配,该位置的一侧是构成单词的字符,但另一侧是非单词字符或字符串的开始或结束位置。
展望
前瞻用于匹配下一个特定字符集是否出现。
表示exp1(?=exp2)匹配exp1 exp1(?Exp2)与exp1匹配,exp 1后面不跟exp2
看一个例子:
苹果(?=橙色)
(/apple(?=橙色)/)。测试(' apple orange 123 ');//true (/apple(?=橙色)/)。测试(' apple pear 345 ');//false再看一个例子:
苹果(?橙色)
(/apple(?橙色)/)。测试(' apple orange 123 ');//false (/apple(?橙色)/)。测试(' apple pear 345 ');//真以上关于JavaScript正则表达式语法的老生常谈,都是边肖跟大家分享的内容。希望能给大家一个参考,支持我们。