JavaScript 正则表达式语法

定义

  JavaScript定义正则表达式有两种方法。

1.RegExp构造函数

var pattern = new RegExp("[bc]at","i");

  它接收两个参数:一个是要匹配的字符串模式,另一个是可选的标志字符串。

2.字面量

var pattern = /[bc]at/i;

  正则表达式的匹配模式支持三种标志字符串:

  • g:global,全局搜索模式,该模式将被应用于所有字符串,而并非搜索到第一个匹配项就停止搜索;
  • i:ingore case,忽略字母大小写,即在确定匹配项时忽略模式和字符串大小写;
  • m:multiple lines,多行模式,即在搜索到达一行文本末尾时会继续查找下一行是否有匹配项。

  这两种创建正则表达式方法的不同之处在于,正则表达式字面量始终会共享同一个RegExp实例,而使用构造函数创建的每一个新RegExp实例都是新实例。

元字符

  元字符是拥有特殊意义的字符,正则表达式的元字符主要有:

  ( [ { \ ^ $ | ) ? * + .  

  在不同的组合中元字符有其不同的意义。

预定义特殊字符

  

字符类

  简单类

  一般情况下正则表达式一个字符对应字符串一个字符,但我们可以使用[]来构建一个简单的类,来表示符合某一特征的一类字符。例如:

  

  [abc]可以匹配方括号中的a、b、c或其任意组合的字符。

  反向类

  既然[]可以构建一个类,那么自然就会联想到与之对应的不包含括号中内容的类,这个类叫做反向类,例如[^abc]就可以匹配不是a或b或c的字符。

  

  范围类

  有时候一个一个字符匹配太麻烦而且匹配的类型也相同,此时我们可以使用"-"连接线来表示某个闭区间之间的内容,例如匹配所有小写字母可以使用[a-z],如下:

  

  匹配所有的0到9简直的任意数字可以使用[0-9]表示:

  

  预定义类

  对于如上我们创建的几个类,正则表达式为我们提供了几个常用的预定义类来匹配常见的字符,如下:

字符   等价类   含义
.   [^\n\r] 匹配除了回车符和换行符之外的所有字符
\d [0-9] 数字字符
\D [^0-9] 非数字字符
\s [\t\n\x0B\f\r] 空白字符
\S   [^\t\n\x0B\f\r] 非空白字符
\w [a-zA-Z_0-9] 单词字符(字母、数字和下划线)
\W [^a-zA-Z_0-9] 非单词字符

量词

  上面的方法匹配字符都是一对一匹配的,如果某个字符连续出现多次按照上面的方法匹配会非常麻烦,因此我们想有没有其它方法可以直接匹配多次重复出现的字符。正则表达式为我们提供了一些量词,如下:

字符   含义  
? 出现零次或一次(最多一次)
+ 出现一次或多次(至少一次)
* 出现零次或多次(任意次)
{n} 出现n次
{n,m} 出现n到m次
{n,} 至少出现n次

  贪婪模式与非贪婪模式

  对于{n,m}这种匹配方式,到底是匹配n个还是匹配m个呢?这就涉及到匹配模式的问题。默认情况下,量词是尽可能多的匹配字符,也就是所谓的贪婪模式,例如:

var num = ‘123456789‘;
num.match(/\d{2,4}/g);   //[1234]、[5678]、[9]

  与贪婪模式对于的是非贪婪模式,只需要在量词之后加"?"即可,例如{n,m}?,就是按照最少的字符匹配,如下: 

var num = ‘123456789‘;
num.match(/\d{2,4}?/g);   //[12]、[34]、[56]、[78]、[9]

分组

  量词只能是单个字符匹配多次,如果我们希望匹配某一组字符多次呢?正则表达式中小括号可以定义一个字符串整体为一个分组。

  我们想要匹配apple这个单词出现4次可以这样匹配(apple){4},如下:

  

  如果想要匹配apple或orange出现4次,可以插入管道符"|",例如:

  (apple|orange){4}

  

  如果使用分组的正则表达式中出现多个小括号即多个分组,那么匹配结果就会把匹配项也分组并编号,例如:

  (apple)\d+(orange)

  

  如果我们不希望捕获某些分组,只需要在分组的小括号前面紧跟一个问号和冒号即可,例如:

  (?:apple)\d+(orange)

  

边界

  正则表达式也为我们提供了几个常用的边界匹配字符,例如:

字符 含义
^ 以xx开头
$ 以xx结尾
\b 单词边界,指[a-zA-Z_0-9]之外的字符
\B 非单词边界

  

  其中单词边界匹配的是一个位置,这个位置的一侧是构成单词的字符,但另一侧为非单词字符、字符串的开始或结束位置。

前瞻

  前瞻用来匹配接下来出现的是或不是某一个特定的字符集。

表达式 含义
exp1(?=exp2) 匹配后面是exp2的exp1
exp1(?!exp2) 匹配后面不是exp2的exp1

  

  看一个例子:

  apple(?=orange)

  

(/apple(?=orange)/).test(‘appleorange123‘);   //true
(/apple(?=orange)/).test(‘applepear345‘);   //false

  再看另一个例子:

  apple(?!orange)

  

(/apple(?!orange)/).test(‘appleorange123‘);   //false
(/apple(?!orange)/).test(‘applepear345‘);   //true

  

时间: 2024-11-09 00:59:50

JavaScript 正则表达式语法的相关文章

JavaScript正则表达式语法及使用范例大全

JavaScript正则表达式 1.      使用JS正则表达式,首先要了解JS正则表达式的常用符号,如下图: /-/ 代表一个模式的开始和结束 ^ 匹配字符串的开始 $ 匹配字符串的结束 \s 匹配一个空白字符 \S 匹配一个非空白字符 \d 匹配一个数字字符,等价于[0-9] \D 匹配一个非数字字符,等价于[^0-9] \w 匹配一个数字.字母.或下划线,等价于[A-Za-z0-9_] . 匹配一个除了换行符之外的字符 \ 转义字符,对于上述这些特殊的符号,如果要匹配,则需要加\进行转义

javascript正则表达式——语法

js中正则表达式,是处理字符优先考虑用的,本文是正则三部曲之正则语法. \  转义字符:'\\n'匹配\n ^  开始位置:'^[0-9]'匹配以数字开头的字符,可以匹配'88DC',不可匹配'DC88'

javascript正则表达式定义(语法)

javascript正则表达式定义(语法) 正则表达式的2种定义方法:一种是直接调用RegExp(),第二种是直接用字面量来定义,即var re = /正则规则/; 2种定义方法本质都是调用RegExp()方法 在调用同一段正则代码的时候,ECMAScript3和ECMAScript5中表现完全不一样 ? function reg(){ var re = /\sjavascript/; return re; } 分别在ECMAScript3和ECMAScript5中调用reg()方法多次 在EC

JavaScript 正则表达式——基本语法--图形化表示易懂

JavaScript 正则表达式——基本语法 定义 JavaScript种正则表达式有两种定义方式,定义一个匹配类似 <%XXX%> 的字符串 1. 构造函数 var reg=new RegExp('<%[^%>]+%>','g'); 2. 字面量 var reg=/<%[^%>]%>/g; g: global,全文搜索,默认搜索到第一个结果接停止 i: ingore case,忽略大小写,默认大小写敏感 m: multiple lines,多行搜索(更改^

JavaScript 正则表达式上——基本语法

定义 JavaScript种正则表达式有两种定义方式,定义一个匹配类似 <%XXX%> 的字符串 1. 构造函数 var reg=new RegExp('<%[^%>]+%>','g'); 2. 字面量 var reg=/<%[^%>]%>/g; g: global,全文搜索,默认搜索到第一个结果接停止 i: ingore case,忽略大小写,默认大小写敏感 m: multiple lines,多行搜索 元字符 正则表达式让人望而却步以一个重要原因就是其转

js正则表达式语法

转载自http://blog.csdn.net/zaifendou/article/details/5746988 1. 正则表达式规则 1.1 普通字符 字母.数字.汉字.下划线.以及后边章节中没有特殊定义的标点符号,都是"普通字符".表达式中的普通字符,在匹配一个字符串的时候,匹配与之相同的一个字符. 举例1:表达式 "c",在匹配字符串 "abcde" 时,匹配结果是:成功:匹配到的内容是:"c":匹配到的位置是:开始于

javascript基础语法——词法结构

× 目录 [1]java [2]定义 [3]大小写[4]保留字[5]注释[6]空白[7]分号 前面的话 javascript是一门简单的语言,也是一门复杂的语言.说它简单,是因为学会使用它只需片刻功夫:而说它复杂,是因为要真正掌握它则需要数年时间.实际上,前端工程师很大程度上就是指javascript工程师.前端入门容易精通难,说的是前端,更指的是javascript.本文是javascript基础语法的第一篇——词法结构 与java关系 关于javascript有这样一个说法,java和jav

正则表达式语法规则

一.正则表达式基本语法 两个特殊的符号'^'和'$'.他们的作用是分别指出一个字符串的开始和结束.例子如下: "^The":表示所有以"The"开始的字符串("There","The cat"等):"of despair$":表示所以以"of despair"结尾的字符串:"^abc$":表示开始和结尾都是"abc"的字符串——呵呵,只有"

JAVA正则表达式语法大全

[正则表达式]文本框输入内容控制整数或者小数:^[0-9]+\.{0,1}[0-9]{0,2}$只能输入数字:"^[0-9]*$".只能输入n位的数字:"^\d{n}$".只能输入至少n位的数字:"^\d{n,}$".只能输入m~n位的数字:."^\d{m,n}$"只能输入零和非零开头的数字:"^(0|[1-9][0-9]*)$".只能输入有两位小数的正实数:"^[0-9]+(.[0-9]{2})