Skip to content

RegExp正则表达式基础 #6

@NextBoy

Description

@NextBoy

正则表达式

测试网站

定义方式

正则表达式的定义共有2种方式:

-(1)显式定义;

-(2)隐式定义;

举例:

var myregex = new ReExp("[0-9]");    //显式定义
var myregex = /[0-9]/;    //隐式定义

普通字符

普通字符就是az、09这类常见的字符。

元字符(特殊字符)

多个普通字符的集合

元字符 | 说明

  • \d 匹配数字,相当于[0-9]
  • \D 匹配非数字,相当于[^0-9]
  • \w 匹配字母或数字或下划线
  • \W 匹配任意不是字母、数字、汉字或下划线的字符
  • \s 匹配任意的空白符,如空格、换行符、制表符等
  • \S 匹配任意不是空白符的字符
  • .(点号) 匹配除了换行符以外的任意字符
  • [...] 匹配方括号中的所有字符
  • [^...]匹配非方括号中的所有字符

连接符

[]表示匹配方括号内的任一字符。在正则表达式中,匹配数字或者英文字母的书写非常不方便。
因此,正则表达式引入了连接符“-”来定义字符的范围。

|连接符 | 说明|
|.......|...................|
|[0-9] | 匹配数字,等价于\d|
|[a-z] | 匹配英文小写字母|
|[A-Z] | 匹配英文大写字母|
|[0-9a-zA-Z] | 匹配数字或英文字母|

限定符

  • * 重复0次及以上
  • ? 重复0次或者1次
    • 重复1次及以上
  • {n}重复n次
  • {n,}重复n次及以上
  • {n,m}重复n到m次

定位符

定位符 说明
^ 限定开始位置的字符
$ 限定结尾位置的字符
\b 限定单词(字)边界的字符
\B 限定非单词(字)边界的字符

转义字符

如果我们要匹配正则表达式中的特殊字符,我们就必须在
该特殊字符前面加上反斜杠“\”将其进行转义。
需要转义的字符有:$、(、)、*、+、.、[、]、?、\、/、^、{、}、|。
这些字符都不需要记忆,见得多就自然而然记住了。

分组符

分组使用的字符为“(”和“)”,即左圆括号和右圆括号。
分组之后,用小括号括起来的表达式看出一个整体来处理。

例如:
/(123){2}/ = /123123/

  • 捕获型分组( )

    • 引用
    • 反向引用
  • 非捕获型分组(?: )

exec()可以获取部捕获型分组的内容

选择符

选择符是“|”,用于选择匹配2个选项之中的任意一个,
类似JavaScript中的“或”运算。

例如:
/(H|h)ello/ 匹配 hello或者Hello

贪婪匹配和惰性匹配

  • 贪婪匹配: 普通量词,匹配尽可能多
  • 惰性匹配: 加个? 匹配尽可能少

例子

var str = '<span>123</span>456</span>';
var reg1 = /<span>.+<\/span>/;
var reg2 = /<span>.+?<\/span>/;

console.log(reg1.exec(str));
console.log(reg2.exec(str));

正向前瞻和反向前瞻

  • 正向前瞻(零宽断言): (?=)
  • 反向前瞻(负向零宽断言) (?!)
var target = ' 1.img  hello.png 2.png  3.img  4.gif ';
var regImg = /\b\w+(?=\.img)\b/g;

var result = target.match(regImg);

console.log(result);
//结果: ['1','3']

对数字进行千位转化,每三位数增加一个逗号

function trans(num) {
  var reg  = /\B(?=(\d{3})+\.)/g;   //获取不为开头的从'.'开始的每三位数的位置
  var str = num.toString();
  var result = str.replace(reg,',');
  
  return parseFloat(result);
}

console.log(  trans(123456789.11) );

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions