资讯专栏INFORMATION COLUMN

RegExp对象

anonymoussf / 1891人阅读

摘要:修饰符修饰符表示模式的附加规则,放在正则模式的最尾部。全局匹配,正则对象将匹配全部符合条件的结果,主要用于搜索和替换忽略大小写和可以匹配行首和行尾了,即和会识别换行符正则模式不含修饰符,每次都是从字符串头部开始匹配。

匹配规则 字面量字符

</>复制代码

  1. 大部分字符在正则表达式中,就是字面的含义。如果在正则表达式之中,某个字符只表示它字面的含义,那么它们就是“字面量字符”(literalcharacters)

</>复制代码

  1. /Wade/.test("Dwyane Wade") // true

上面代码中正则表达式的Wade,就是字面量字符,所以 /Wade/ 匹配 Dwyane Wade.

元字符

</>复制代码

  1. 除了字面量字符以外,还有一部分字符有特殊含义,不代表字面的意思。它们叫做“元字符”(metacharacters)

点字符 (.)

</>复制代码

  1. 匹配任意一个字符,除了换行和行结束符。

</>复制代码

  1. var regexp = /w.e/;
  2. regexp.test("wae") // true
  3. regexp.test("wade"); // false

位置字符

</>复制代码

  1. 位置字符用来提示字符所处的位置,主要有两个字符。

^ 表示字符串的开始位置

$ 表示字符串的结束位置

</>复制代码

  1. // test必须出现在开始位置
  2. /^test/.test("test-wade"); // true
  3. // test必须出现在结束位置
  4. /test$/.test("wade-test"); // true
  5. // 开始位置到结束位置只有test
  6. /^test$/.test("test"); // true
  7. /^test$/.test("test test"); // false

选择符 (|)

</>复制代码

  1. 竖线符号(|)在正则表达式中表示“或关系”(OR

</>复制代码

  1. // 匹配Test或Wade
  2. /Test|Wade/.test("DwyaneWade") // true

多个选择符可以联合使用

</>复制代码

  1. // 匹配Test、Dwyane、Wade之中的一个
  2. /Test|Dwyane|Wade/.test("Dwyane3") // true

选择符会包括它前后的多个字符,比如/ab|cd/指的是匹配ab或cd,而不是指匹配b或者c。如果想修改这个行为,可以使用圆括号。

</>复制代码

  1. /a( |
  2. )b/.test("a
  3. b"); // true
转义符

</>复制代码

  1. 正则表达式中那些有特殊含义的元字符,如果要匹配它们本身,就需要在它们前面要加上反斜杠。

</>复制代码

  1. /1+1/.test("1+1"); // false
  2. /1+1/.test("1+1"); // true

正则表达式中,需要反斜杠转义的,一共有12个字符:^、.、[、$、(、)、|、*、+、?、{和。

特殊字符

</>复制代码

  1. 正则表达式对一些不能打印的特殊字符,提供了表达方法。

n 匹配换行键

r 匹配回车键

t 匹配制表符 tab(U+0009)

v 匹配垂直制表符(U+000B)

f 匹配换页符(U+000C)

[b] 匹配退格键(U+0008),不要与b混淆

0 匹配null字符(U+0000)

cX 表示Ctrl-[X],其中的X是A-Z之中任一个英文字母,用来匹配控制字符

字符类

</>复制代码

  1. 字符类(class)表示有一系列字符可供选择,只要匹配其中一个就可以了。所有可供选择的字符都放在方括号内,比如[abc] 表示abc之中任选一个匹配。

</>复制代码

  1. /[abc]/.test("Dwyane"); // true

有两个字符在字符类中有特殊含义

1.脱子符(^)

</>复制代码

  1. 如果方括号内的第一个字符是[^],则表示除了字符类之中的字符,其他字符都可以匹配。比如1 表示abc之外都可以匹配。

</>复制代码

  1. /[^abc]/.test("Test"); // true

</>复制代码

  1. 如果方括号内没有其他字符,即只有[^],就表示匹配一切字符,其中包括换行符。上文提到的点字符(.)是不包括换行符的。

</>复制代码

  1. /wa.e/.test("wa
  2. e"); // false
  3. /wa[^]/.test("wa
  4. e"); // true

2.连字符(-)

</>复制代码

  1. 连字符(-)表示字符的连续范围。比如[0123456789]可以写成[0-9][A-Z]表示26个大写字母。

</>复制代码

  1. /a-z/.test("b"); // false
  2. /[a-z].test("b"); // true
预定义模式

</>复制代码

  1. 预定义模式指的是某些常见模式的简写方式。

</>复制代码

  1. - d 匹配0-9之间的任一数字,相当于[0-9]
  2. - D 匹配所有0-9以外的字符,相当于[^0-9]
  3. - w 匹配任意的字母、数字和下划线,相当于[A-Za-z0-9_]
  4. - W 除所有字母、数字和下划线以外的字符,相当于[^A-Za-z0-9_]
  5. - s 匹配空格(包括换行符、制表符、空格符等),相等于[
  6. vf]
  7. - S 匹配非空格的字符,相当于[^
  8. vf]
  9. -  匹配词的边界
  10. - B 匹配非词边界,即在词的内部

</>复制代码

  1. /w/.test("wade03"); // true
重复类

模式的精确匹配次数,使用大括号({})。{n}表示恰好重复n次,{n,}表示至少重复n次,{n,m}表示重复不少于n次,不多于m次。

</>复制代码

  1. /te{2}st/.test("teest"); // true
  2. /te{2,5}st/.test("teeeeeest"); // false
量词符

</>复制代码

  1. 量词符用来设定某个模式出现的次数。

? 问号表示某个模式出现0次或1次,等同于{0, 1}

星号表示某个模式出现0次或多次,等同于{0,}

加号表示某个模式出现1次或多次,等同于{1,}

</>复制代码

  1. // t 出现0次或1次
  2. /t?est/.test("test"); // true
  3. /t?est/.test("est"); // true
  4. // t 出现0次或多次
  5. /t*est/.test("tttest"); // true
  6. /t*est/.test("est"); // true
  7. // t 出现1次或多次
  8. /t+est/.test("ttest"); // true
  9. /t+est/.test("est"); // false
贪婪模式

</>复制代码

  1. 上文中量词符,默认情况下都是最大可能匹配,即匹配直到下一个字符不满足匹配规则为止。这被称为贪婪模式。

</>复制代码

  1. var str= "aaa";
  2. str.match(/a+/); // ["aaa"]

如果想将贪婪模式改为非贪婪模式,可以在量词符后面加一个问号(?)。

+?:表示某个模式出现1次或多次,匹配时采用非贪婪模式。

*?:表示某个模式出现0次或多次,匹配时采用非贪婪模式。

??:表格某个模式出现0次或1次,匹配时采用非贪婪模式。

</>复制代码

  1. var str = "aaa";
  2. str.match(/a+/); // ["a"]
修饰符

</>复制代码

  1. 修饰符(modifier)表示模式的附加规则,放在正则模式的最尾部。

g :全局匹配(global),正则对象将匹配全部符合条件的结果,主要用于搜索和替换

i :忽略大小写(ignorecase)

m :^和$可以匹配行首和行尾了,即^和$会识别换行符(n)

</>复制代码

  1. // 正则模式不含g修饰符,每次都是从字符串头部开始匹配。
  2. var regex = /b/;
  3. var str = "abba";
  4. regex.test(str); // true
  5. regex.test(str); // true
  6. // 正则模式含有g修饰符,每次都是从上一次匹配成功处,开始向后匹配。由于只有一个b,第二次就失败了
  7. var regex = /b/g;
  8. var str = "aba";
  9. regex.test(str); // true
  10. regex.test(str); // false
  11. // 加了i修饰符以后,不考虑大小写,所以模式abc匹配字符串ABC
  12. /abc/.test("ABC") // false
  13. /abc/i.test("ABC") // true
  14. // 字符串结尾处有一个换行符。如果不加m修饰符,为false。加上以后,$可以匹配行尾
  15. /world$/.test("hello world
  16. ") // false
  17. /world$/m.test("hello world
  18. ") // true
组匹配

</>复制代码

  1. 正则表达式的括号表示分组匹配,括号中的模式可以用来匹配分组的内容。

</>复制代码

  1. // 第一个模式没有括号,结果+只表示重复字母t。第二个模式有括号,结果+就表示匹配test
  2. /test+/.test("testt") // true
  3. /(test)+/.test("testtest") // true

</>复制代码

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

</>复制代码

  1. // 正常匹配
  2. var url = /(http|ftp)://([^/
  3. ]+)(/[^
  4. ]*)?/;
  5. url.exec("http://google.com/");
  6. // ["http://google.com/", "http", "google.com", "/"]
  7. // 非捕获组匹配
  8. var url = /(?:http|ftp)://([^/
  9. ]+)(/[^
  10. ]*)?/;
  11. url.exec("http://google.com/");
  12. // ["http://google.com/", "google.com", "/"]

</>复制代码

  1. x(?=y):先行断言(Positive look-ahead),x只有在y前面才匹配,y不会被计入返回结果。

</>复制代码

  1. /d+(?=%)/.test("23%"); // true
  2. /d+(?=%)/.test("2A%"); // false

</>复制代码

  1. x(?!y):先行否定断言(Negative look-ahead),x只有不在y前面才匹配,y不会被计入返回结果。

</>复制代码

  1. /d+(?!%)/.test("2%"); // false
  • abc ↩

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

    转载请注明本文地址:https://www.ucloud.cn/yun/97780.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元查看
    <