js 正则表达式

JavaScript通过内置对象RegExp来支持正则表达式

两种实例化方法:

  1. 字面量   var reg= / \bis\b /g;
  2. 构造函数 new RegExp(‘’\\bis\\b,’g’);  反斜线需要转义

修饰符

g:全局匹配 (global)

i:忽略大小写 (ignore case)

m:多行匹配(multiple lines)

元字符

  1. 原义文本字符
  2. 元字符(在正则表达式中有特殊含义的非字母字符)

例如:\b 单词边界

.* + ? $ . | \ () {} []

字符

含义

\t

水平制表符

\v

垂直制表符

\n

换行符

\r

回车符

\0

空格符

\f

换页符

\cX

与X对应的控制字符(Ctrl+X)

字符类

可以使用[]构建一个简单的类

表达式[abc]就是把abc归为一类,表达式可以匹配这类的字符

 

‘a1b2c3’.replace(/[abc]/g,’X’);àX1X2X3

字符类取反

[^…]

‘abcdef123’.replace(/[^abc]/g,”Q”);  à”abcQQQQQQ”

范围类

[0-9]:代表0-9

[a-zA-Z]: 代表字母  在字符类里可以连续写

预定义类

字符

等价类

含义

.

[^\r\n]

除了回车和换行的所有字符

\d

[0-9]

数字类

\D

[^0-9]

非数字字符

\w

[a-zA-Z0-9_]

单词字符(字母,数字下划线)

\W

[^a-zA-Z0-9_]

非单词字符

\s

[\r\n\t\f\x0B]

空白符

\S

[^\r\n\t\f\x0B]

非空白符

边界

字符

含义

^

 

$

 

\b

单词边界

\B

非单词边界

\b:

多行处理:

‘@123

@123

@123’.replace(/^@\d/g,’X’);-->

“X23

@123

@123”

 

 

‘@123

@123

@123’.replace(/^@\d/gm,’X’);-->

“X23

X23

X23”

量词

字符

含义(使用数学的集合表示)

?

{0,1}

+

[1,∞)

*

[0, ∞)

{n}

{n}

{n,m}

[n,m]

{n,}

[n, ∞)

  1. /\d?/  à

 

  1. /\d+/  à

 

3./\d*/

 

  1. /\d{5}/

 

贪婪模式(默认的模式)

‘12345678’.replace(/\d{3,6}/,”X”);  à’X78’

系统会尽可能多的匹配,直到匹配失败

非贪婪模式

做法很简单,在量词后面加个问号 \d{3,6}?

分组

匹配dog{3}出现三次àdog{3}

 

使用()可以达到分组的效果  使量词作用于分组

(dog){3}

可以使用|达到或的效果

do(g|c)at

 

反向引用(分组)

‘2016-8-29’.replace( /(\d{4})-(\d{2})-(\d{2})/g  , ’$1/$2/$3’);

忽略分组

如果不希望捕获分组,可以在分组内加上?:就可以

(?:dog){3}

 

前瞻

名称

正则

含义

正向前瞻

Exp(?=assert)

 

负向前瞻

Exp(?!assert)

 

正向后瞻

Exp(?<=assert)

Javascript不支持

负向后瞻

Exp(?<!assert)

Javascript不支持

/ \w( ?=\d ) /g à

 

对象属性

l  global:是否全文搜索,默认值为false

l  multiplelines:是否多行搜索,默认为false

l  ignoreCase:  是否忽略大小写,默认值为false

l  lastIndex:当前表达式匹配内容的最后一个字符的下一个位置

l  source:正则表达式的文本内容

var exp=/is/;

exp.global(false或true为只读属性);

正则表达式的相关方法

  1. test方法:

regexp.test(string);

用来判断是否匹配成功

非全局搜索中,lastIndex不生效

  1. exec方法:

如果匹配到,就返回一个数组,否则返回null

返回的数组有两个属性:

l  index:声明匹配文本的第一个字符的位置

l  input:存放被检索字符串string

  • 非全局调用:返回数组的第一个元素为 与正则表达式相匹配的文本,第二个为 与reg对象子表达式(分组)想匹配的文本。。。

例如:var reg=/ \d (\w) \d /;

      var  arr=reg.test(‘2a32m3’);  àarr=[ ‘2a3’ , ’a’ ];

      arr.index=0;

      reg.lastIndex不起作用      

  • 全局调用:
  1. search方法

string.search(string|reg);

用于检索字符串中指定的子字符串,或检索正则表达式相匹配的子字符串

返回第一个匹配结果index,如果没有找到返回-1

该方法忽略g标志并且总是从哪个第一个字符开始搜索

  1. match方法

string.match(reg);

  • 非全局调用:和exec方法一样
  • 全局调用:返回结果数组,没有分组信息,没有index属性和input属性
  1. split方法

string.split(reg|string);

  1. string.replace(reg,function);

该函数有4个参数:

  • 匹配的字符串
  • 分组
  • index
  • 原字符串

string.replace(/\d/g,function(s){

  return parseInt( s )+1;

});

string.replace(reg,string);

 

posted @ 2018-09-06 19:35  fight139  阅读(204)  评论(0编辑  收藏  举报