xml地图|网站地图|网站标签 [设为首页] [加入收藏]

奥门金沙手机娱乐网址javascript正则表达式

时间:2020-01-04 21:39来源:计算机
javascript正则表达式 定义一个正则表达式 可以用字面量 var regex = /xyz/;var regex = /xyz/i; 也可以用构造函数 var regex = new RegExp('xyz');var regex = new RegExp('xyz', i); // 第二个参数表示修饰符 正则表

javascript正则表达式

定义一个正则表达式

可以用字面量

var regex = /xyz/;
var regex = /xyz/i;

也可以用构造函数

var regex = new RegExp('xyz');
var regex = new RegExp('xyz', i); // 第二个参数表示修饰符

正则表达式组成

直接量字符

直接量字符如a

特殊含义的字符需要转义

如果使用RegExp方法生成正则对象,转义需要使用两个斜杠,因为字符串内部会先转义一次。

(new RegExp(1+1)).test(1+1) // false
(new RegExp(1+1)).test(1+1) // true

字符类

字符 匹配
[…] 方括号内的任意字符
[^…] 不在方括号内的任意字符
- 连字符
. 除了换行符和行结束符
w 任何ASCII字符组成的单词=[a-zA-Z0-9]
W =[^a-zA-Z0-9]
s 空白字符
S 非空白字符
d ASCII数字=[0-9]
D [^0-9]

连字符-[1-31]表示1至3,而不是到31

字符类的连字符必须在头尾两个字符中间,才有特殊含义,否则就是字面含义。比如,[-9]就表示匹配连字符和9,而不是匹配0到9。

重复

字符 描述
{n,m}  
{n,}  
{n}  
? 0次或1次
+ 在于等于1次
* 在于等于0次

非贪婪重复

在上面的重复字符后加上?就是非贪婪重复。

/a+/匹配字符串aaa时,会匹配aaa,而/a+?/会匹配a

正则表达式的模式匹配总是会寻找字符串中第一个可能匹配的位置。如/a+b/匹配aaab时,会匹配aaab/a+?b/也会匹配’aaab’,都是从aaab中的第一个a开始匹配。所以,非贪婪模式并不表示最短匹配。

选择、分组和引用

选择

|

匹配abcdef

/ab|cd|ef/

分组

()

var m = abcabc.match(/(.)b(.)/);
m; // [abc, a, c]

非捕获组

(?:x)称为非捕获组(Non-capturing group),表示不返回该组匹配的内容,即匹配的结果中不计入这个括号。

var m = abc.match(/(?:.)b(.)/);
m[1]; // c

引用

 

从1开始

不能在字符类中使用引用

指定匹配位置

字符 描述
^  
$  
匹配单词边界
B 匹配非单词边界
(?=p) x(?=y)称为先行断言(Positive look-ahead),x只有在y前面才匹配,y不会被计入返回结果。
(?!p) x(?!y)称为后行断言(Negative look-ahead),x只有不在y前面才匹配,y不会被计入返回结果。

[ ]匹配的是退格

关于(?=p)(?!p)

var m = abc.match(/b(?=c)/);
m; // b

var m = abd.match(/b(?!c)/);
m; // [b]

修饰符

字符 描述
i 不区分大小写
g 默认情况下,第一次匹配成功后,正则对象就停止向下匹配了。g修饰符表示全局匹配(global),加上它以后,正则对象将匹配全部符合条件的结果,主要用于搜索和替换。
m 字符串的头部或尾部可能会有换行符。默认情况下,正则对象会将换行符算入字符串的开头或结尾。m修饰符表示多行模式(multiline),加上它以后,正则对象会忽略字符串头部或尾部的换行符,即^和$会忽略换行符。

关于m

/world$/.test(hello world
) // false
/world$/m.test(hello world
) // true

上面的代码中,字符串结尾处有一个换行符。如果不加m修饰符,匹配不成功,因为字符串的结尾不是world;加上以后,换行符被省略,匹配成功。


属性和方法

ignoreCase:返回一个布尔值,表示是否设置了i修饰符,该属性只读。

global:返回一个布尔值,表示是否设置了g修饰符,该属性只读。

multiline:返回一个布尔值,表示是否设置了m修饰符,该属性只读。

var r = /abc/igm;

r.ignoreCase // true
r.global // true
r.multiline // true

lastIndex:返回下一次开始搜索的位置。该属性可读写,但是只在设置了g修饰符时有意义。

source:返回正则表达式的字符串形式(不包括反斜杠),该属性只读。

var r = /abc/igm;

r.lastIndex // 0
r.source // abc

test()

正则对象的test方法返回一个布尔值,表示当前模式是否能匹配参数字符串。

/cat/.test('cats and dogs') // true

如果正则表达式带有g修饰符,则每一次test方法都从上一次结束的位置开始向后匹配。

r.lastIndex // 0
r.test(s) // true

r.lastIndex // 2
r.test(s) // true

r.lastIndex // 4
r.test(s) // false

带有g修饰符时,可以通过正则对象的lastIndex属性指定开始搜索的位置

var r = /x/g;
var s = '_x_x';

r.lastIndex = 4;
r.test(s) // false

exec()

正则对象的exec方法,可以返回匹配结果。如果发现匹配,就返回一个数组,每个匹配成功的子字符串,就是数组成员,否则返回null。

var s = '_x_x';
var r1 = /x/;
var r2 = /y/;

r1.exec(s) // [x]
r2.exec(s) // null

如果正则表示式包含圆括号(即要求“组匹配”),则返回的数组会包括多个元素。其中,第一个元素是整个匹配成功的结果,后面的元素就是圆括号对应的匹配成功的组。也就是说,第二个元素对应第一个括号,第三个元素对应第二个括号,以此类推。

exec方法的返回数组还包含以下两个属性:
input:整个原字符串。
index:整个模式匹配成功的开始位置(从0开始)。

var r = /a(b+)a/;
var arr = regex.exec(_abbba_aba_);

arr // [abbba, bbb]

arr.index // 1
arr.input // _abbba_aba_

如果正则表达式加上g修饰符,则可以使用多次exec方法,下一次搜索的位置从上一次匹配成功结束的位置开始。

var r = /a(b+)a/g;

var a1 = r.exec(_abbba_aba_);
a1 // [abbba, bbb]
a1.index // 1
r.lastIndex // 6

var a2 = r.exec(_abbba_aba_);
a2 // [aba, b]
a2.index // 7
r.lastIndex // 10

var a3 = r.exec(_abbba_aba_);
a3 // null
a3.index // TypeError: Cannot read property 'index' of null
r.lastIndex // 0

var a4 = r.exec(_abbba_aba_);
a4 // [abbba, bbb]
a4.index // 1
r.lastIndex // 6

字符串中与正则表达式相关的4个函数

match

match方法与正则对象的exec方法非常类似:匹配成功返回一个数组,匹配失败返回null。

如果正则表达式带有g修饰符,则该方法与正则对象的exec方法行为不同,会一次性返回所有匹配成功的结果。

var s = abba;
var r = /a/g;

s.match(r) // [a, a]
r.exec(s) // [a]

设置正则表达式的lastIndex属性,对match方法无效,匹配总是从字符串的第一个字符开始。

search

字符串对象的search方法,返回第一个满足条件的匹配结果在整个字符串中的位置。如果没有任何匹配,则返回-1。

该方法会忽略g修饰符。

设置正则表达式的lastIndex属性,对match方法无效,匹配总是从字符串的第一个字符开始。

replace

它接受两个参数,第一个是搜索模式,第二个是替换的内容。

搜索模式如果不加g修饰符,就替换第一个匹配成功的值,否则替换所有匹配成功的值。

replace方法的第二个参数可以使用美元符号$,用来指代所替换的内容。

$ & 指代匹配的子字符串。

$` 指代匹配结果前面的文本。

$’ 指代匹配结果后面的文本。

$n 指代匹配成功的第n组内容,n是从1的自然数。

hello world.replace(/(w+)s(w+)/,$2 $1)
// world hello

abc.replace(b, [$`-$&-$'])
// a[a-b-c]c

replace方法的第二个参数还可以是一个函数,将匹配内容替换为函数返回值。

作为replace方法第二个参数的替换函数,可以接受多个参数。它的第一个参数是捕捉到的内容,第二个参数是捕捉到的组匹配(有多少个组匹配,就有多少个对应的参数)。此外,最后还可以添加两个参数,倒数第二个参数是捕捉到的内容在整个字符串中的位置(比如从第五个位置开始),最后一个参数是原字符串。

split

字符串对象的split方法按照正则规则分割字符串,返回一个由分割后的各个部分组成的数组。

该方法接受两个参数,第一个参数是分隔规则,第二个参数是返回数组的最大成员数。

'a,  b,c, d'.split(',')
// [ 'a', '  b', 'c', ' d' ]

'a,  b,c, d'.split(/, */)
// [ 'a', 'b', 'c', 'd' ]

'a,  b,c, d'.split(/, */, 2)
[ 'a', 'b' ]

空格可以直接用/, */


 

定义一个正则表达式 可以用字面量 var regex = /xyz/;var regex = /xyz/i; 也可以用构造函数 var regex = new RegExp(xyz);var regex = new...

编辑:计算机 本文来源:奥门金沙手机娱乐网址javascript正则表达式

关键词:

  • 上一篇:没有了
  • 下一篇:没有了