RegExp对象(正则表达式)

正则表达式(Regular Expression)

创建:

1.构造函数:

var regex = new RegExp('xyz', 'i');

2.字面量

var regex = /xyz/i;

修饰符:

  1. g:global,全文搜索,不添加的话搜索到第一个结果停止搜索
  2. i:ingore case,忽略大小写,默认大小写敏感
  3. m:multiple lines,多行搜索

需要转义的元字符

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

正则表达式模式

表达式 描述
字符类
[] 比如[abcd]代表一个字符,这个字符可以是 abcd四个字符中的任意一个
^ 取反,比如表达式 [^abc] 表示一个不是字符a或b或c的字符
范围类
[0-9] 0-9中的任意一个字符
[a-z] a-z中的任意一个字符
[a-zA-Z0-9] 大写字母、小写字母、数字中的任意一个字符
预定义类
. 等同于[^\r\n],除了回车符和换行符之外的所有字符
\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] ,非单词字符
边界类
^ (与[不相邻的情况下) 以xxx开头, 如:^hello,以hello开头的字符
$ 以xxx结尾,如:hello$,以hello结尾的字符
\b 单词(字母、数字、下划线)边界,注意:- 也被认为是单词边界
\B 非单词边界
量词
? 出现零次或一次(最多出现一次)
+ 出现一次或多次(至少出现一次)
* 出现零次或多次(任意次)
{n} 出现n次
{n,m} 出现n到m次,在既可能匹配n次也可能匹配m次时,会尽可能多地匹配,即会匹配m次,这是所谓的贪婪模式。非贪婪模式,尽可能少的匹配, 形式为{n,m}?
{n,} 至少出现n次
分组
() 把多个字符作为一个整体
\1 ()配合使用,表示()里面匹配的字符本身 。比如有字符abc,查找([a-z]),替换'\1',,则字符会被替换为'a','b','c',
前瞻
exp1(?=exp2) 匹配后面是exp2的exp1
exp1(?!exp2) 匹配后面不是exp2的exp1

一些字面量查找小例子

  • 如何匹配一个合法的 url?(url 以 http 或者 https 或者 // 开头)
 var reg = /^(https?:)?\/\/.+/
  • 如何匹配一个手机号?
var reg2 = /^1[3578]\d{9}$/

RegExp对象实例属性

  • .ignoreCase:返回一个布尔值,是否大小写敏感,默认是false。
  • .global: 是否全局搜索,默认是false
  • .multiline: 多行搜索,默认值是false
  • .lastIndex: 下一次开始搜索的位置,每次正则表达式成功匹配时,lastIndex属性值都会随之改变,可读写。
  • .source: 返回正则表达式的字符串形式(不包括反斜杠),该属性只读。

RegExp对象实例方法

  • RegExp.prototype.test(str)
// 测试字符串参数中是否存正则表达式模式,如果存在则返回true,否则返回false
var r = /x/g;
var s = '_x_x';

r.lastIndex // 0
r.test(s) // true
// 如果正则表达式带有g修饰符,则每一次test方法都从上一次结束的位置开始向后匹配。
r.lastIndex // 2
r.test(s) // true
// 如果正则模式是一个空字符串,则匹配所有字符串。
new RegExp('').test('abc') // true
  • RegExp.prototype.exec(str)
// 返回匹配结果。如果发现匹配,就返回一个数组,成员是匹配成功的子字符串,否则返回null
var r = /a(b+)a/; //有圆括号的情况下,返回的数组会包括多个成员,后面的成员就是圆括号对应的匹配成功的组
var arr = r.exec('_abbba_aba_');

arr // ["abbba", "bbb"]

//整个模式匹配成功的开始位置(从0开始计数)
arr.index // 1
//整个原字符串。
arr.input // "_abbba_aba_"
//如果正则表达式加上g修饰符,则可以使用多次exec方法
var reg = /a/g;
var str = 'abc_abc_abc'

var r1 = reg.exec(str);
r1 // ["a"]
r1.index // 0
reg.lastIndex // 1

var r2 = reg.exec(str);
r2 // ["a"]
r2.index // 4
reg.lastIndex // 5

var r3 = reg.exec(str);
r3 // ["a"]
r3.index // 8
reg.lastIndex // 9

String的实例方法(与正则表达式有关)

  • String.prototype.match()
var s = '_x_x';
var r1 = /x/;
var r2 = /y/;

s.match(r1) // ["x"]
s.match(r2) // null
//与正则对象的exec方法非常类似,不同的是若带有g修饰符,,会一次性返回所有匹配成功的结果
var s = 'abba';
var r = /a/g;

s.match(r) // ["a", "a"]
  • String.prototype.search()
// 返回第一个满足条件的匹配结果在整个字符串中的位置。如果没有任何匹配,则返回-1。
'_x_x'.search(/x/) // 1
  • String.prototype.replace()
str.replace(search, replacement) //替换匹配的值,第一个是正则表达式,表示搜索模式,第二个是替换的内容,可以是函数。
'aaa'.replace(/a/, 'b') // "baa"
'aaa'.replace(/a/g, 'b') // "bbb"
  • String.prototype.split()
// 按照正则规则分割字符串,返回一个由分割后的各个部分组成的数组。
str.split(separator, [limit]) //第一个参数是正则表达式,表示分隔规则,第二个参数是返回数组的最大成员数。

你可能感兴趣的:(JS)