js 正则表达式

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

两种实例化方法:

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

修饰符

g:全局匹配 (global)

i:忽略大小写 (ignore case)

m:多行匹配(multiple lines)

元字符

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

例如: 单词边界

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

字符

含义

水平制表符

v

垂直制表符

换行符

回车符

空格符

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]: 代表字母  在字符类里可以连续写

预定义类

字符

等价类

含义

.

[^ ]

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

d

[0-9]

数字类

D

[^0-9]

非数字字符

w

[a-zA-Z0-9_]

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

W

[^a-zA-Z0-9_]

非单词字符

s

[ fx0B]

空白符

S

[^ fx0B]

非空白符

边界

字符

含义

^

$



单词边界

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);

原文地址:https://www.cnblogs.com/zhuxiang1633/p/9600449.html