正则表达式

Author Avatar
zongyuan 7月 05, 2018 【字数:631】 【阅读时长:3min】
  • 在其它设备中阅读本文章

总是记不住的正则,再过一遍

能干嘛

  • 数据验证。
  • 复杂的字符串搜寻、替换。
  • 基于模式匹配从字符串中提取子字符串。

构造函数

var regex = new RegExp('xyz', 'i');  
var regex = new RegExp(/xyz/i); 
var regex = /xyz/i; 
// ES6的写法。ES5在第一个参数是正则时,不允许此时使用第二个参数,会报错。 
// 返回的正则表达式会忽略原有的正则表达式的修饰符,只使用新指定的修饰符。
// 下面代码返回”i”。
new RegExp(/abc/ig, 'i').flags

用法及API

String的匹配方法

String.search(string|reg)
参数: string|reg
返回: 第一个与参数匹配的子串的起始位置,如果找不到,返回-1。
说明:不支持全局搜索

'aabbcc'.search('ab') // 1
'aabbcc'.search(/ab/) // 1
'aabbcc'.search(/abc/) // -1

String.replace()
作用:查找并替换字符串。
第一个参数:string|reg
第二个参数:要进行替换的字符串,也可以是函数。
用法:

$1、$2、...、$99 与 regexp 中的第 1 到第 99 个子表达式相匹配的文本。
$&  与 regexp 相匹配的子串。
$`  位于匹配子串左侧的文本。
$'  位于匹配子串右侧的文本。
$$  普通字符$。
eg:
'abc'.replace(/b/g, "{$$$`$&$'}")
// 结果为 "a{$abc}c",即把b换成了{$abc}

String.match()
参数:string|reg
返回:一个由匹配结果组成的数组。

'abcabc'.match(/ab/) // ["ab", index: 0, input: "abcabc", groups: undefined]
'abcabc'.match(/ab/g) // ["ab", "ab"]
'abcabc'.match(/abb/g) // null

String.split()
作用:把一个字符串分割成字符串数组。
参数:string|reg
返回:子串组成的数组。

'abcabc'.split('b') // ["a", "ca", "c"]
'abcabc'.split(/b/) // ["a", "ca", "c"]
'abcabc'.split(/b/g) // ["a", "ca", "c"]
RegExp的方法

reg.exec()
参数:str
返回:

  • 非全局检索:与String.macth()非全局检索相同,返回一个数组或null。
  • 全局检索:尽管是全局匹配的正则表达式,但是exec方法只对指定的字符串进行一次匹配。但是可以反复调用来实现全局检索。在 RegExpObject 的lastIndex 属性指定的字符处开始检索字符串;匹配后,将更新lastIndex为匹配文本的最后一个字符的下一个位置;再也找不到匹配的文本时,将返回null,并把 lastIndex 属性重置为 0。

let reg = /ab/g
let str = 'abcabc'
reg.exec(str) // ["ab", index: 0, input: "abcabc", groups: undefined]
reg.exec(str) // ["ab", index: 3, input: "abcabc", groups: undefined]
reg.exec(str) // null
reg.lastIndex // 0

reg.test()
参数:字符串。
返回:true或false。

reg.test('aaa') // false
reg.test('abc') // true

reg.toString()
返回:字符串

reg.toString() // "/ab/g"

感谢阅读 thx~
本文链接:https://627235655.github.io/2018/07/05/regular-expression/