正则例子

<!DOCTYPE html>
<html lang="en">

<head>
	<meta charset="UTF-8">
	<title>RegExp</title>
</head>

<body>
	<script>


		rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/      //<p></p>  <div />

		// 正则表达式是匹配模式,要么匹配字符,要么匹配位置。


		// reg.test()   true false
		// str.match()  返回匹配到的所有子项数组



		//    ^a 以a开头
		//    [abc] 表达式的查找范围,匹配其中的一位,(范围表示法)
		//    [^abc] 此时的^符号表示非,即不在abc范围的任何一个字符(排除字符组)

		//    [A-z0-9]  字符分组
		//    (abc|bdc) 分支结构-惰性的(先匹配前面的)
		//    . === [^\r\n]      点. 匹配任何一个字符
		//    
		//    \w === [_0-9A-z] 单词字符
		//    \W === [^\w]  非单词字符
		//    
		//    \d === [0-9]
		//    \D === [^0-9]
		//    
		//    \b === 单词边界
		//    \B === 非单词边界
		//    
		//    
		//    \t 制表符
		//    \r 回车符
		//    \n 换行符
		//    \t 垂直制表符
		//    \f 换页符
		//    \s === [\t\r\n\v\f ] 还有一个空格
		//    \S === [^\s] 
		//    ?=n
		//    ?!n 
		//    
		//    [\w\d]  举个例子,可以连写
		//    
		// 	  量词:
		// 	  n? 0或1个n  === n{0,1}
		// 	  n+ 1或多个n  === n{1,}
		// 	  n* 0或多个n  === n{0,}
		//    {m} 等价于{m,m},表示出现m次。
		//    {m,n},表示连续出现最少m次,最多n次。
		//  






// 贪婪匹配
		var regex = /\d{2,5}/g;
		var string = "123 1234 12345 123456";
		console.log(string.match(regex));// => ["123", "1234", "12345", "12345"]

		// 通过在量词后面加个问号就能实现惰性匹配,因此所有惰性匹配情形如下:
		var regex = /\d{2,5}?/g;
		console.log( string.match(regex) );// => ["12", "12", "34", "12", "34", "12", "34", "56"]

// {m,n}?
// {m,}?
// ??
// +?
// *?

		//  -----------reg.test------------------------------------------------- 

		// let re = null
		// for(let i; i< 10;i++) {
		// 	re = /cat/g
		// 	re.test("catastrophe")
		// }
		// for(let i; i< 10;i++) {
		// 	re = new RegExp("cat","g")
		// 	re.test("catastrophe")
		// }

		//  ------------------------------------------------------------ 

		// var reg = /[1234567890][1234567890][1234567890]/g;
		// var str = "123456sdsd223def434d";
		// console.log(str.match(reg));  // ["123", "456", "223", "434"]

		//  ------------------------------------------------------------ 

		//   str.match()  返回匹配到的所有子项数组
		// var  reg1 = /(\w)\1(\w)\2/; //无全局g   匹配两两相同的字符,反向引用第一个子表达式匹配的内容  \1反向引用第一个子表达式   () 就是子表达式
		// var reg2 = /(\w)\1(\w)\2/g; //有全局g
		// var str = "aabbcaabb";
		// console.log(str.match(reg1));//match() 返回数组,无全局g 时,一次匹配,返回包括子表达式的内容,不会继续向下搜索
		// console.log(str.match(reg2));//match()返回数组,有全局g,全局匹配,只返回匹配的内容,不返回返回包括子表达式的内容

		// var reg = /^a/gm;
		// var str = "abab\nabab"; 
		// console.log(str.match(reg)); //["a","a"]


		// 
		// var reg = /^[bc]at/g;
		// var str = "bat1";
		// console.log(str.match(reg));//["bat"]
		// 

		//  ---------边界--------------------------------------------------- 
		//    \b === 单词边界
		//    \B === 非单词边界
		// var reg = /\bccd\B/g;
		// var str = "bc ccds";
		// console.log(str.match(reg));

		//  ------------------------------------------------------------ 

		// 检验字符串首尾是否含有数字
		// var reg = /^\d|\d$/gi;
		// 
		//
		//  ---------reg.exec()- 返回数组。包含额外的index和input 属性-------------------------------------------------- 
		// var reg = /ab/g;
		// var str = "ababababab";
		// console.log(reg.exec(str));
		// reg.lastIndex;
		// console.log(reg.exec(str));//从上次匹配到的单词末尾继续往下找
		// console.log(reg.exec(str));
		// console.log(reg.exec(str));
		// console.log(reg.exec(str));
		// console.log(reg.exec(str));//null
		// console.log(reg.exec(str));
		// 
		// 
		//  ---------子表达式-------------------------------------------------- 
		// var  reg = /(\w)\1\1\1/g;//匹配四个相同的字符,反向引用第一个子表达式匹配的内容
		// // \1反向引用第一个子表达式
		// var str = "aaaa";
		// console.log(str.match(reg)) //["aaaa"]
		// 
		// var  reg = /(\w)\1(\w)\2/g;//匹配四个相同的字符,反向引用第一个子表达式匹配的内容
		// // \1反向引用第一个子表达式
		// var str = "aabbccdd";
		// console.log(reg.exec(str)) //["aabb", "a", "b", index: 0, input: "aabb", groups: undefined]
		// 
		// 
		//  ---------str.replace()-------------------------------------------------- 
		// var str = "aa";
		// console.log(str.replace("a","b"));//ba  //只能改变一个
		// console.log(str.replace(/a/,"b"));//ba  //没有g全局,也只能改变一个
		// console.log(str.replace(/a/g,"b"));//bb  //g全局,改变所有

		// 把aabb变成bbaa
		// let a = 1
		// var str = "aabb";
		// var reg = /(\w)\1(\w)\2/;
		// console.log(str.replace(reg,"$2$2$1$1"));// $ 也是反向引用子表达式的值
		// console.log(str.replace(reg, function ($,$1,$2) {  //函数的参数分别表示匹配到的字符串,第一个子表达式,第二个子表达式,以此内推......
		// 	return $2 + $2 + $1 +$1;
		// }));//两种方法

		// let s = 'aabbccdde'
		// let re = s.replace(/(\w)\1/g, function ($str, $1, $2) {
		// 	// 每匹配到就会执行此函数,替换成return的值
		// 	console.log($str);
		// 	if ($str === 'aa') {
		// 		return 'a||'
		// 	} else {
		// 		return 'b||'
		// 	}
		// })
		// console.log('re', re);


		//  ---------实战-------------------------------------------------- 

		// the-first-name 变成 theFirstName
		// var str = "the-first-name";
		// var reg = /-(\w)/g;
		// console.log(str.replace(reg,"$1"));
		// console.log(str.replace(reg,function ($,$1) {
		// 	return $1.toUpperCase();
		// }));


		// var str = "abaaaaa";
		// var reg1 = /a(?=b)/g;
		// var reg2 = /a(?!b)/g;
		// console.log(str.match(reg2));//["a"]



	</script>

</body>

</html>

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值