资讯专栏INFORMATION COLUMN

RegExp对象

W4n9Hu1 / 1280人阅读

摘要:匹配规则标准参考教程正则对象的属性和方法属性正则对象的属性分成两类。一类是修饰符相关,返回一个布尔值,表示对应的修饰符是否设置。方法正则对象的方法返回一个布尔值,表示当前模式是否能匹配参数字符串。

正则表达式

/pattern/flags new RegExp(pattern [, flags])

pattern 正则表达式的文本
flags 如果指定,标志可以具有以下值的任意组合:
g 全局匹配
i 忽略大小写
m 多行;让开始和结束字符(^ 和 $)工作在多行模式工作
u Unicode。把模式当作Unicode代码点(code points)的序列。
y 黏度; 在目标字符串中,只从正则表达式的lastIndex属性指定的显示位置开始匹配(并且不试图从任何之后的索引匹配)。
//字面量
var regex = /xyz/i;
//构造函数
var regex = new RegExp("xyz", "i");

这两种写法——字面量和构造函数——在运行时有一个细微的区别。采用字面量的写法,正则对象在代码载入时(即编译时)生成;采用构造函数的方法,正则对象在代码运行时生成。考虑到书写的便利和直观,实际应用中,基本上都采用字面量的写法。

匹配规则

MDN
javascript标准参考教程

正则对象的属性和方法

属性


正则对象的属性分成两类。
一类是修饰符相关,返回一个布尔值,表示对应的修饰符是否设置。

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方法返回一个布尔值,表示当前模式是否能匹配参数字符串。

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

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

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

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

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

//lastIndex属性只对同一个正则表达式有效,所以下面这样写是错误的

var count = 0;
while (/a/g.test("babaa")) count++;

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

如果正则表示式包含圆括号(即含有“组匹配”),则返回的数组会包括多个成员。第一个成员是整个匹配成功的结果,后面的成员就是圆括号对应的匹配成功的组。也就是说,第二个成员对应第一个括号,第三个成员对应第二个括号,以此类推。整个数组的length属性等于组匹配的数量再加1。

var s = "_x_x";
var r = /_(x)/;

r.exec(s) // ["_x", "x"]

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

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

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():返回一个数组,成员是所有匹配的子字符串。
search():按照给定的正则表达式进行搜索,返回一个整数,表示匹配开始的位置。
replace():按照给定的正则表达式进行替换,返回替换后的字符串。
split():按照给定规则进行字符串分割,返回一个数组,包含分割后的各个成员。

//String.prototype.match()

var s = "abba";
var r = /a/g;
s.match(r) // ["a", "a"]
r.exec(s) // ["a"]
//String.prototype.search()

"_x_x".search(/x/)
//String.prototype.replace()

"aaa".replace("a", "b") // "baa"
"aaa".replace(/a/, "b") // "baa"
"aaa".replace(/a/g, "b") // "bbb"

//replace方法的第二个参数可以使用美元符号$,用来指代所替换的内容。
//    $& 指代匹配的子字符串。
//    $` 指代匹配结果前面的文本。
//    $" 指代匹配结果后面的文本。
//    $n 指代匹配成功的第n组内容,n是从1开始的自然数。
//    $$ 指代美元符号$。
  
"hello world".replace(/(w+)s(w+)/, "$2 $1")
// "world hello"

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


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

"3 and 5".replace(/[0-9]+/g, function(match){
  return 2 * match;
})
// "6 and 10"

var a = "The quick brown fox jumped over the lazy dog.";
var pattern = /quick|brown|lazy/ig;

a.replace(pattern, function replacer(match) {
  return match.toUpperCase();
});
// The QUICK BROWN fox jumped over the LAZY dog.
//String.prototype.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" ]

"aaa*a*".split(/(a*)/)
// [ "", "aaa", "*", "a", "*" ]

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/81666.html

相关文章

  • JS中的正则表达式

    摘要:构造函数可以有两个字符串参数,第一个参数包含正则表达式的主体部分。只读的布尔值,说明这个正则表达式是否带有修饰符。中正则的扩展构造函数在中,只能接受字符串作为参数,允许其直接接受正则表达式作为参数。 上文传送门:初探正则表达式 正则表达式是一个描述字符模式的对象,JavaScript 的 RegExp 类表示正则表达式,String 和 RegExp 都定义了方法,后者使用正则表达式进...

    Soarkey 评论0 收藏0
  • JS正则表达式精简教程(JavaScript RegExp 对象

    摘要:返回值是被找到的值。支持正则表达式的对象的方法方法检索与正则表达式相匹配的子字符串。该数组是通过在指定的边界处将字符串分割成子串创建的。注意报错正确示例附表修饰符修饰符描述执行对大小写不敏感的匹配。查找以十六进制数规定的字符。 什么是 RegExp? RegExp 是正则表达式的缩写。 当您检索某个文本时,可以使用一种模式来描述要检索的内容。RegExp 就是这种模式。 简单的模式可以...

    ACb0y 评论0 收藏0
  • 【JavaScript】正则表达式

    摘要:对象对象对象表示正则表达式,它是对字符串执行模式匹配的强大工具。查找以十六进制数规定的字符。支持正则表达式的对象的方法方法描述检索与正则表达式相匹配的值。替换与正则表达式匹配的子串。 RegExp对象 RegExp 对象 RegExp 对象表示正则表达式,它是对字符串执行模式匹配的强大工具。 直接量语法 /pattern/attributes 创建 RegExp 对象的语法 new R...

    894974231 评论0 收藏0
  • PocketLibs(2)—— 请求相关 path-to-regexp

    摘要:直接调用构造函数使用,一个可能含某种匹配模式的路径字符串作为它的必选参数,它返回一个正则对象。有两个方法返回一个正则对象,效果与调用构造函数一样返回一个函数,该函数与下面的返回的函数功能一样方法,同样接收一个路径字符串。 code in here使用path-to-regexp,我们可以在路径字符串中使用正则。如/:foo*/:bar?、/icon-:foo(d+).png等。像exp...

    Prasanta 评论0 收藏0
  • Javascript正则表达式入门

    摘要:返回值一个新的对象,具有指定的模式和标志。参数作用正则表达式规定匹配的类型。如果未找到匹配,则返回值为。返回值请注意,无论是否是全局模式,都会把完整的细节添加到它返回的数组中。字符串或正则表达式,从该参数指定的地方分割。 前言 PS:2018/03/27 优化文章格式,新增部分测试代码说起正则其实大家都会经常接触到,前端小到校验,大到插件随处可见,简单的方法也能实现需求,不过缺乏灵活性...

    joywek 评论0 收藏0
  • JavaScript标准库系列——RegExp对象(三)

    摘要:目录导语理解正则表达式模式的规则字符串和正则实例的属性和方法检索实例小结导语正则表达式是处理字符串的一门艺术手法,应用场景经常出现在表单验证部分高级程序设计一书开篇提到,这门语言最原始的应用就是处理输入验证操作,所以正则表达式从诞生那一刻就 目录 导语 1.理解正则表达式 2.模式的规则 3.字符串和正则实例的属性和方法 4.检索实例 5. 小结 导语 正则表达式是处理字符串的一门艺...

    邱勇 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<