自己用来回顾的正则

写的好的正则的总结文章太多了,这里仅记录一些自己容易忘记的,可以随时来查查

详细了解可以阅读http://www.cnblogs.com/tugenhua0707/p/5037811.html 这位大大的整理

 

自己需要回顾查看的有

 

一.支持正则的方法

String中

       1.search(pattern)   返回查到的位置,总是不执行全局匹配,忽略g,同时每次都从开始位置查找

       2. match(pattern)   类似于indexOf(),但是返回值为匹配到的文本的数组集合

3. replace(pattern,replacement)  返回替换后的新字符串

       这里的replacement可以是一个字符串,也可以是一个返回字符串的函数

       ECMAScript v3 规定,replace() 方法的参数 replacement 可以是函数而不是字符串。在这种情况下,每个匹配都调用该函数,它返回的字符串将作为替换文本使用。该函数的第一个参数是匹配模式的字符串。接下来的参数是与模式中的子表达式匹配的字符串,可以有 0 个或多个这样的参数。接下来的参数是一个整数,声明了匹配在 stringObject 中出现的位置。最后一个参数是 stringObject 本身。

       当出现g的时候,每次匹配将调用1次replace,他arguments有3个长度,第一个是匹配到的字符串,第二个是她所在的位置,第三个是整个原字符串(第二次第三次第n次匹配到调用的时候都是原字符串)

       我们可以这样来看

var replaceTime = 0;

string.replace(regex,function(){

              console.log("============第" + ++replaceTime + "次匹配替换============");

              for(var i = 0,argLength = arguments.length;i < argLength;i++) {

               console.log("第" + (i + 1) + "个参数内容 = " + arguments[i]);

            }

});

 

(来自https://www.baidufe.com/item/40cb68b3270ac0a1ddc0.html)

       在replacement里,$有特殊的含义  $1表示第一个捕获的分组

$1、$2、...、$99

与 regexp 中的第 1 到第 99 个子表达式相匹配的文本。

$&

与 regexp 相匹配的子串。

$`

位于匹配子串左侧的文本。

$'

位于匹配子串右侧的文本。

$$

直接量符号。

(来自w3school)

但是似乎函数中不能直接用,需要用RegExp["$`"]这样的方式

 

4.split(separator,[ howmany]) howmany控制返回的最大数量

 

RegExp中

1.text(str)  返回boolean

2.exec(str) 在全局模式下,他会保存上一次的位置,然后继续找下去

例子

var x = "a.xxx.com b.xxx.com c.xxx.com";

var re = /\s?(.*?).xxx.com/g;

while( tempR = re.exec(x))

{

  console.log(tempR[1]);

}

 

exec() 都会把完整的细节添加到它返回的数组中。这就是 exec() 与 String.match() 的不同之处,后者在全局模式下返回的信息要少得多。

 

二.元字符

元字符

描述

.

查找任意的单个字符,除换行符外

\w

任意一个字母或数字或下划线,A_Za_Z0_9,_中任意一个

\W

查找非单词的字符,等价于[^A_Za_z0_9_]

\d

匹配一个数字字符,等价于[0-9]

\D

匹配一个非数字字符,等价于[^0-9]

\s

匹配任何空白字符,包括空格,制表符,换行符等等。等价于[\f\n\r\t\v]

\S

匹配任何非空白字符,等价于[^\f\n\r\t\v]

\b

匹配一个单词边界,也就是指单词和空格间的位置,比如’er\b’可以匹配”never”中的”er”,但是不能匹配”verb”中的”er”

\B

匹配非单词边界,’er\B’能匹配’verb’中的’er’,但不能匹配’never’中的’er’

\0

查找NUL字符。

\n

匹配一个换行符

\f

匹配一个换页符

\r

匹配一个回车符

\t

匹配一个制表符

\v

匹配一个垂直制表符

\xxx

查找一个以八进制数xxx规定的字符

\xdd

查找以16进制数dd规定的字符

\uxxxx

查找以16进制数的xxxx规定的Unicode字符。

 

 

三.量词

量词

描述

n+

匹配任何至少包含一个n的字符串

n*

匹配零个或者多个n的字符串

n?

匹配零个或者1个n的字符串

n{x}

匹配包含x个n的序列字符串

n{x,y}

匹配至少x个,最多y个n的字符串

n{x,}

匹配至少x个的字符串

n$

匹配以n结尾的字符串

^n

匹配以n开头的字符串

?=n

匹配其后紧接指定的n字符串

?!n

匹配其后没有紧接指定的n字符串

 

其中 对?= 取一个例子

var str="my name is longen";

 

// 匹配以na其后紧接m的字符串

 

// ?= 只是匹配位置,不会返回值

 

console.log(str.match(/na(?=m)/g)); //["na"]

 

| 左右两边表达式之间 “或” 关系

()既表示整体,又表示捕获

 

四.贪婪模式与非贪婪模式

贪婪模式在整个表达式匹配成功的情况下尽可能多的匹配;非贪婪模式在整个表达式匹配成功的前提下,尽可能少的匹配

非贪婪模式就是在贪婪模式后加上一个?

 

五.环视

环视在语言精粹中表明并不重要,不整理

 

六.捕获组与反向应用

捕获的例子:

var num = "11 22";
var n = num.replace(/(\d+)\s*(\d+)/,"$2 $1");
console.log(n); // 22 11
 

反向引用的例子:

console.log(/(longen)\1/.test("longen")); // false
 
console.log(/(longen)\1/.test("longenlongen")); // true

 

非捕获性分组

在分组的左括号的后面紧跟?:

 

非捕获性分组的例子:

var num2 = "11 22";
/#(?:\d+)/.test(num2);
console.log(RegExp.$1); //""

 

转载于:https://www.cnblogs.com/photon-phalanx/p/6136667.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值