正则表达式知识点整理

实际应用Demo:

1. 输入框中只能输入订单号(纯数字),多个订单号用英文逗号隔开

var reg = /^[\d,]*$/
reg.test('123,456'); // true
reg.test('11/22'); // false

一.创建正则表达式的两种方式
1. 通过构造函数定义:var 变量名 = new RegExp(/表达式/);
2.字面量:var 变量名 = /表达式/;

二.认识正则符号:
注:括号内,前面加个元字符^ 进行取反,表示匹配不能为括号里面的字符。eg:console.log(/[^abc]/.test(‘a’)); 答案是false;
简写完整写法语意
.[^\n\r]除了换行和回车以外的任意字符
\d[0-9]数字字符
\D[^0-9]非数字字符
\s[\t\n\xOB\f\r] 空白字符
\S[^\t\n\xOB\f\r] 非空白字符
\w[a-zA-Z_0-9]单词字符
\W[^a-zA-Z_0-9]非单词字符


三.元字符

1.基本元字符

.匹配任意的非换行字符,常常表示通用元字符使用
[]匹配一个出现在[]中的字符,eg:[123],[a-z]
()1.分组 2.提升优先级
或者 eg:foot|food表示匹配foot或者food 注:|的优先级很低

2.限定元字符
符号 语意
+ 一个或者多个{1,}
* 0个或者多个{0,}
0个或者1个
{n} 取n个
{n,} 取n个到多个
{n,m} 取n个到m个

3.首尾元字符
符号语意
^1.必须以什么开头2.表示否定
$1.必须以什么结尾2.表示组引用eg: a(b)c

4.其它
符号语意
(?:)表示不加入到数组中
    </td>
eg:
 var s = '1234567';
 var r1 = /(\d)(\d\d\d)(\d\d)(\d)/;
 r1.exec( s ); // => [ '1234567', '1', '234', '56', '7' ]
 var r2 = /(\d)(?:\d\d\d)(\d\d)(\d)/;
 r2.exec( s ); // => [ '1234567', '1', '56', '7' ]

#### 四.方法
方法说明
test用来检测字符串是否符合定义的正则规则
exec利用正则表达式去处理字符串,并将字符串中符合正则表达式的数据提取出来,(1).如果匹配上了,就返回数组,第0项就是匹配到的结果(2)如果正则表达式 中有分组也就是有(),那么对应的第n组匹配到的结果就是在这个数组中的第n项,n从1开始(3)如果没有匹配的则返回null;
replacereplace(正则表达式,需要替换的字符串)

1.exec方法的进一步说明: (1)exec匹配提取,只能匹配提取第一个被捕获的数据 所以如果需要匹配字符串中所有符合要求的字符串,需要开启全局模式,这种情况下,调用一次exec方法就会在上一次的基础上匹配。 eg:
 var data = '1234567';
 var p = /\d/g;
 p.exec(data);//["1"]
 p.exec(data);//["2"]
 ...
 p.exec(data);//null
 p.exec(data);//["1"]

一般我们通过以下方法实现:

var a = "1234567ni";
var p = /\d/g;
var m;
var arr = [];
while((m = p.exec(a)) != null){
    arr.push(m);
}
console.log(arr);
 

(2)正则表达式的贪婪模式:如果一个正则表达式中有多个.+或者.*的结构,那么在匹配的时候就会造成歧义,这时候就满足一个规则,即贪婪模式;在贪婪模式中,从左到右匹配个数的能力是左强右弱,而且是只有两个级别的,要么强,要么弱。

eg:

var ddd = "1234567";
	   "123456" "" "7"
var pp = /(.+)(.*)(.+)/;
pp.exec(ddd) //["1234567", "123456", "", "7"]

2.replace方法的进一步说明:
(1) 例如将var data = "abccdad"中的a全部替换成e;

data.replace(/[a]/g,"e");

(2)在替换中也可以使用到组
例如常用的更改年月日的显示方式,将2015-1-10改成2015年1月10日

var data = "2015-1-10";
var pp = /(\d+)-(\d+)-(\d+)/;
data.replace(pp,'$1年$2月$3日');

(3)在替换的时候,第二个参数也可以是一个函数,而函数的参数表示的是匹配到的数组的值,因此前边日期的替换我们可以利用函数的返回值替换匹配到的结果。

var data = "2015-1-10";
var pp = /(\d+)-(\d+)-(\d+)/;
data.replace(pp,function(match,n1,n2,n3){
	return n1 + '年' + n2 + '月' + n3 + '月';
})

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值