javaScript正则表达式对象

javaScript之正则表达式对象

1. 简介

正则表达式(Regular Expression),又称规则表达式,计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。
javaScript中使用RegExp对象提供正则表达式的功能。

创建正则表达式有两种方式:

  1. 使用直接量
  2. 使用构造函数
// 使用直接量创建正则表达式,以"/"表示开始和结束
var regexp1 = /abc/;

// 使用构造函数创建正则表达式
var regexp2 = new RegExp("abc");

上面两种写法都创建了一个内容为abc的正则表达式对象。但是通过直接量创建的正则表达式对象在javaScript引擎编译的时候就已经创建了,而通过构造函数创建的正则表达式对象是在运行时才创建的。

RegExp构造函数还可以接受第二个参数,表示修饰符。

var regexp3 = new RegExp("abc","im");
// 两者等价
var regexp4 = /abc/im;

2. RegExp实例对象属性和方法

2.1 实例对象属性

正则表达式对象的实例属性分为两类:

  1. 与修饰符相关的属性
    • ignoreCase:返回布尔值,表示是否设置了i修饰符,只读。
    • global:返回布尔值,表示是否设置了g修饰符,只读。
    • multiline:返回布尔值,表示是否设置了m修饰符,只读。
    • flags:返回字符串,包含了已经设置了的修饰符,只读。
  2. 与修饰符无关的属性
    • lastIndex:返回一个整数,表示下一次搜索开始的位置,可读写。
    • source:返回正则表达式的字符串形式,只读。
var regexp5 = /test/igm;

// 与修饰符相关的属性(只读)
regexp5.ignoreCase; // true
regexp5.global; // true
regexp5.multiline; // true
regexp5.flags; // “gim”

// 与修饰符无关的属性
regexp5.lastIndex; // 0
regexp5.source; // “test”

2.2 实例对象方法

2.2.1 RegExp.prototype.test()

RegExp实例对象的test方法返回一个布尔值,表示当前模式是否能匹配参数字符串。
如果RegExp实例对象带有g修饰符,则每一次test方法都从上一次结束的位置开始向后匹配。

var regexp6 = /Hello/;
regexp6.test("Hello World!"); // true

// 带有g修饰符的正则表达式对象
var regexp7 = /m/g;
var t = "m_m_m_mafl";

regexp7.lastIndex; // 0
regexp7.test(t); // true

regexp7.lastIndex; // 1
regexp7.test(t); // true

regexp7.lastIndex; // 3
regexp7.test(t); // true

regexp7.lastIndex; // 5
regexp7.test(t); // true

regexp7.lastIndex; // 7
regexp7.test(t); // false

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

var regexp8 = /m/g;
var t = "m_m_m_mafl";

// 指定lastIndex属性
regexp8.lastIndex = 7; // 指定从第7个位置开始搜索,返回false,lastIndex重置为0
regexp8.test(t); // false

regexp8.lastIndex = 0;

2.2.2 RegExp.prototype.exec()

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

var regexp9 = /x/;
var regexp10 = /y/;
var s = "xadf";

regexp9.exec(s); // ["x", index: 0, input: "xadf", groups:  undefined]
regexp10.exec(s); // null

上面代码的exec方法,返回一个数组。该数组还包含两个重要属性:

  1. input:原字符串。
  2. index:正则表达式匹配成功的开始位置,从0开始计数。

3. 字符串实例对象方法调用正则表达式

字符串实例对象,有以下几种与正则表达式相关的方法:

  1. String.prototype.match():返回一个包含所有匹配子字符串的数组。
  2. String.prototype.search():按照给定正则表达式搜索,返回一个整数,表示匹配开始的位置。
  3. String.prototype.relace():按照给定正则表达式进行替换,返回替换后的字符串。
  4. String.prototype.split():按照给定正则表达式进行分割,返回一个数组,成员是分割后的子字符串。

3.1 String.prototype.match()

字符串实例对象的match方法对字符串进行正则匹配,匹配成功返回一个数组,匹配失败返回null
如果正则表达式带有g修饰符,会一次性返回所有匹配成功的结果。

var regexp11 = /x/;
var regexp12 = /y/;
var s = "xadf";

// 匹配成功,返回数组
s.match(regexp11); // ["x", index: 0, input: "xadf", groups: undefined]
// 匹配失败,返回null
s.match(regexp12); // null

// 正则表达式带有g修饰符,一次性返回所有匹配成功的结果
var regexp13 = /a/g;
var s = "abcabc";

s.match(regexp13); // ["a", "a"]

注意:字符串实例对象的match方法对字符串进行正则匹配,正则表达式是否含g修饰符,结果有所区别:

var regexp13 = /a/g;
var regexp14 = /a/;
var s = "abcabc";

// 含g修饰符
s.match(regexp13); //  ["a", "a"]
// 不含g修饰符
s.match(regexp14); // ["a", index: 0, input: "abcabc", groups: undefined]

上述代码中,/a/g包含g修饰符,返回的数组,包含所有匹配项,不含indexinput属性;而/a/不包含g修饰符,返回的数组,只包含第一个匹配项,且含indexinput属性。

3.2 String.prototype.search()

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

"abc".search(/a/); // 0
"abc".search(/q/); // -1

3.2 String.prototype.replace()

字符串对象的replace方法可以替换匹配的值。它接受两个参数,第一个是正则表达式,第二个是替换的内容。
正则表达式如果加g修饰符,会替换所有匹配成功的值,否则,只会替换第一个匹配项的值。

// 普通调用
"abc".replace("a", "hello"); // "hellobc"

// 正则表达式调用
"abc".replace(/a/, "s"); // "sbc"

// 带g修饰符的正则表达式
"abcabcaaa".replace(/a/g, "s"); // "sbcsbcsss"

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

  • $&:匹配的子字符串
  • $`:匹配结果前面的字符串
  • $':匹配结果后面的字符串
  • $n:匹配成功的第n组内容,n1开始
  • $$:指代美元符号$
"abcadaeafg".replace(/b/, "$&+$1-$`"); // "ab+$1-acadaeafg"

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

'3afaadf;5'.replace(/[0-9]+/g, function (number) {
  return 100*number;
}); // "300afaadf;500"

3.3 String.prototype.split()

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

// 普通调用
'a,  b,c, d'.split(',')
// [ 'a', '  b', 'c', ' d' ]

// 正则分隔,去除多余的空格
'a,  b,c, d'.split(/, */)
// [ 'a', 'b', 'c', 'd' ]

4. 正则表达式修饰符

前面一直在说正则表达式修饰符,那么修饰符到底有什么用呢?
修饰符表示正则表达式的附加的规则,可以单个使用,也可以多个一起使用。

4.1 g修饰符

g修饰符表示全局匹配,正则表达式将匹配全部符合条件的结果。

4.2 i修饰符

i修饰符表示忽略大小写,默认情况下,正则表达式对象区分大小写。

4.3 m修饰符

m修饰符表示多行模式。默认情况下,^$匹配字符串的开始处和结尾处,加上m修饰符以后,^$还会匹配行首和行尾,即^$会识别换行符(\n)。

5. 参考链接

本博客是自己学习笔记,原文请参考W3C官网教程
如有问题,请及时指出!
欢迎沟通交流,邮箱:[email protected]

发布了15 篇原创文章 · 获赞 3 · 访问量 3660

猜你喜欢

转载自blog.csdn.net/qq_41863849/article/details/104195386