js - 正则表达式基础内容

工具:Regexper

实例化RegExp:

  • 字面量 /\bis\b/g
  • 构造函数 var reg = new RegExp('\\bis\\b', 'g'); (需要转义斜线)

修饰符

  • g:global 全文搜索,不添加则搜索到第一个匹配停止
  • i:ignoreCase 忽略大小写
  • m:multiplelines 多行搜索,以换行符也当成新的一行进行搜索匹配

特殊字符

元字符 含义
\t 水平制表符
\v 垂直制表符
\n 换行符
\r 回车符
\0 空字符
\f 换页符
\cX 与X对应的控制字符(ctrl+X)
\b 单词边界
\B 非单词边界
. 任意字符
* 0或1或多次,任意次
+ 至少1次
0或者1次
{n} 出现n次以上
{n,m} 出现n-m次
{n,} 至少出现n次
{0,n} 最多n次
^ 用着类中表示取反,用在字符串中表示正则的开始
$ 表示正则的结束
类别 表达 例子
字符类 []泛指一个类 [abc]匹配abc中任意一个
范围类 [a-z0-9A-Z]匹配[]中的字符
预定义类 \d:[0-9]数字字符;
预定义类 \D:[^0-9] 非数字字符;
预定义类 \s:空白符;
预定义类 \S:非空白符;
预定义类 \w:[a-zA-Z_0-9]单词字符(字母,数字,下划线);
预定义类 \W:[^a-zA-Z_0-9]非单词字符

贪婪模式

正则中默认为贪婪模式

'12345678'.replace(/\d{3,6}/g, 'X')  //X78 每6个为一个匹配

非贪婪模式

'12345678'.replace(/\d{3,6}?/g, 'X')  //XX78 每3个为一个匹配

分组

使用()能达到分组功能,使量词作用于分组,而不是挨着的字符

  • $符:配合分组,$1表示第一个捕获分组,$2表示第二个捕获分组……
  • 忽略分组:不希望捕获某些分组,只需要在分组内加上 ?:

使用 | 能达到或功能

'abdefcba'.replace(/ab(c|d)ef/g,'X')  //Xcba abcefg或者abdefg都可以匹配

前瞻

正则表达式从文本头部向尾部开始解析,所以在文本尾部方向表示“前”

  • 正向前瞻 exp(?=assert)
  • 负向前瞻 exp(?!assert)
'a1b2c*b#'.replace(/\w(?=\d)/g,'X') //X1X2c*b# 前瞻为数字的匹配
'a1b2c*b#'.replace(/\w(?!\d)/g,'X') //aXbXX*X# 前瞻不为数字匹配

相关属性和方法

对象属性

  • global 是否全文搜索,只读
  • ignoreCase 是否忽略大小写,只读
  • multiline 是否多行搜索,只读
  • lastIndex 当前匹配结果的最后一个字符的下一个字符

方法

  • RegExp.prototype.test(str)
    测试字符串参数中是否存在匹配正则表达式模式的字符串
reg1 = /\w/;
reg1.test('ab'); //true
---------------------------
//特殊情况,在全局搜索下
reg2 = /\w/g;
reg2.test('ab') //true 第一次匹配a
reg2.test('ab') //true 第二次匹配b
reg2.test('ab') //false 第三次则无
while(reg2.test('ab')){
      console.log(reg2.lastIndex); 
}
// 1
   2
   undefined
//lastIndex 表示第一次匹配结束的最后一个字符的下一个字符的索引值
  • RegExp.prototype.match(str)
  • RegExp.prototype.exec(str)
    使用正则表达式模式对字符串执行搜索,并将更新全局RegExp对象的属性;如果没有匹配的文本则返回null,否则返回一个匹配的结果数组。
    - index 声明匹配文本的第一个字符的位置
    - input 存放被检索的字符串String

end

你可能感兴趣的:(js - 正则表达式基础内容)