jaycethanks

1. RegExp

ECMAScript 通过RegExp类型支持正则表达式。

1.1 表示格式:

let expression = /pattern/flags;
//or
let expression = new RegExp("pattern str","flags")// pattern str 不需要由"/.../"包裹,
  • pattern : 正则表达式;
  • flags : 匹配模式的标记;

示例:

let expression = /[bc]at/i;
//or
let expression = new RegExp("[bc]at","i"); // 注意构造函数的两个参数都是String, 且无需`/`包裹

注意: 在通过构造函数来创建一个Pattern 的时候,第一个参数,除了可以传入String, 还能直接传入一个已有的Pattern , 此时,构造函数的第二个参数,即Flags 将会覆盖第一个参数中携带的flags。 利用这个特点,可以实现Pattern 的复制 和 flags 的修改, 以下是一个示例:

const exp1 = /cat/g;
const exp2 = new RegExp(exp1,'i') //  /cat/i

1.2 匹配模式:

"Gimyus"

  • g : global , 全局匹配
  • i : ignore , 大小写忽略
  • m : multiline , 多行匹配
  • y : sticky 粘附模式,表示从lastIndex开始查找
  • u : Unicode 模式, 启用Unicode 匹配
  • s : dotAll 模式,匹配任何字符(包括\n或\r)

全局匹配和多行匹配有什么区别?

可以理解为,/m 通常是和/g 一起使用以增强匹配模式。 以下是一个示例:

hello my darling you
are so sweat
and hello my beauty
hello my lady
you are so kind
hello my heartbeat
you drum like a spring wind
  • 匹配模式 /^hello/g : 将会以整个字符串为匹配对象,仅仅匹配中字符串首部的单个“hello” 子字符串。
  • 匹配模式 /^hello/gm:将会把每行自作单独的匹配对象,将会匹配选中 1,4,6 行首的“hello” 子字符串,共三个。

unicode 模式,将会启用Unicode 字符匹配的支持,以下是一个示例:

const sentence = 'A ticket to 大阪 costs ¥2000 

相关文章: