正则表达式

本篇只记录一些零碎的知识点,多是本人当初感到困惑而后恍然大悟的地方 or 感觉不常用 但记一下心里踏实

  • 1. 理解\b \B
    \b: 单词边界,具体就是\w和\W之间的位置,也包括\w和^之间的位置,也包括\w和$之间的位置。(\w是指数字、字符串和下划线)
    \B: 非单词边界,\B就是\b的反面的意思。例如在字符串中所有位置中,扣掉\b,剩下的都是\B的。具体说来就是\w与\w、\W与\W、^与\W,\W与$之间的位置。
//e.g.
	var result = "[JS] Lesson_01.mp4".replace(/\b/g, '#');
	console.log(result); 
	// => "[#JS#] #Lesson_01#.#mp4#"
	
	
	var result = "[JS] Lesson_01.mp4".replace(/\B/g, '#');
	console.log(result); 
	// => "#[J#S]# L#e#s#s#o#n#_#0#1.m#p#4"

-2.(?=p) (?!p)
其中p是个子模式 ,(?=p)表示p前面的位置,(?!p)正好相反

e.g.
//比如(?=l),表示'l'字符前面的位置,例如:
var result = "hello".replace(/(?=l)/g, '#');
console.log(result); 
// => "he#l#lo"

var result = "hello".replace(/(?!l)/g, '#');

console.log(result); 
// => "#h#ell#o#"

一般书上并没有把它强调成一个位置,如 (?=p),一般都理解成:要求接下来的字符与p匹配,但不能包括p的那些字符。而在本人看来(?=p)就与^一样好理解,就是p前面的那个位置。

  • 3 replace 的回调函数
    str.replace(ext,function(str1,function(a,b,c,d)。第二个参数可以是个回调函数,这个函数的第一个参数是匹配到的字符串,如果有分组,接下来的参数就是匹配到的分组。然后是匹配到的字符串的位置,最后是被匹配的字符串。
//e.g.
var regex = /(\d{4})-(\d{2})-(\d{2})/;
var string = "2017-06-12";
var result = string.replace(regex, function(match, year, month, day) {
  return match;
});
console.log(result); //2017-06-12
-----------------------------------------------------------------------------------------

var regex = /(\d{4})-(\d{2})-(\d{2})/;
var string = "2017-06-12";
var result = string.replace(regex, function(match, year, month, day) {
  return month  + "/" + day + "/" + year;
});
console.log(result); //06/12/2017


  • .4. 捕获分组和 非捕获分组
    ()表示捕获分组,()会把每个分组里的匹配的值保存起来,使用$n(n是一个数字,表示第n个捕获组的内容);
    (?:)表示非捕获分组,和捕获分组唯一的区别在于,非捕获分组匹配的值不会保存起来
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值