JavaScript思維導圖——Day 19(正則表達式RegExp)

<!DOCTYPE html>
<html>
<head>
	<title></title>
</head>
<body>
	<script type="text/javascript">
		// var test = "\
		// <div></div>\
		// <span></span>\
		// ";
		// var str = "abcd\nedf";

		//RegExp

		// var reg = /abc/i;
		//ignoreCase 忽略大小寫

		// var reg1 = new RegExp(reg);
		// var str = "aBcd";


		//表達式 

		// var reg = /^a/gm;
		//global 全局匹配
		//多行匹配 + m 
		// var str = "abababa\nabab";
		//兩個a

		// reg.test();只能返回true和false
		// str.match();可以返回準確的內容數組


		// var reg = /[ab][cd][d]/g;
		//第一位區間第二位區間第三位...
		//[^a] 第一位不是a
		//^a 第一位是a
		// var reg1 = /[0-9A-z][cd][d]/g;
		// var str = "ab1cd";
		// str.match(reg); //"bcd"
		//str.match(reg1);  //"1cd"
		

		// var reg = /(abc|bcd)[0-9]/g;
		// "|" 或運算
		// var str = "bcd2";





		//元字符
		// \w === [0-9A-z_]
		// \W === [^\w] 除了\w的所有元素
		// \d === [0-9]
		// \D === [^\d]
		// \s === [\t\n\r\v\f ] 空格所有的
		// \S === [^\s]
		// \b === 單詞邊界
		// \B === 非單詞邊界
		// . === [^\r\n]



		// var reg = /\bcde\B/g;
		//c 要是單詞邊界
		//e 不是單詞邊界
		// var reg1 = /\t/g;
		//匹配table鍵空格
		// var str = "b%cd2";
		// var str1 = "aBc 	cdefgh";

		// 正則表達式中Unicode編碼
		// \u0000
		// \u0affff
		// \u101abe

		// var reg2 = /[\u0000-\uffff]/g;
		// var str2 = "我想 測試一下";
		// var reg3 = /[\d\D]/g;
		//一個集合加上他的補集等於所有
		// var reg4 = /./g;




		//量詞
		//貪婪匹配原則
		//能多就不會少
		//n+ {1, 正無窮infinity}
		//n* {0, 正無窮infinity}
		//n? {0,1}
		//n{x} {x}
		//n{x,y} {x,y}
		//n{x,} {x, 正無窮}

		//$ 以什麼什麼結尾
		//開頭加結尾固定字符串

		// var reg = /\w{1,2}/g;
		// var str = 'cde';
		// var reg1 = /^cde$/g;

		//檢驗一個字符串首尾是否含有數字
		//或 |
		//&& === [\s\S]*

		// var reg3 = /^\d|\d$/g;
		// var str2 = "sdjfjas1";


		// RegExp 對象屬性

		// var reg = /ab/g;
		// var str = "ababababab";


		// RegExp 對象方法

		// reg.exec(); 不加g遊標lastIndex不變
		//reg.lastIndex 遊標索引沒匹配一次找index
		//匹配方法


		// 拓展
		var str = "aaaa";//匹配xxxx
		//子表達式
		var reg = /(a)\1\1\1/g;
		var str1 = "aabb";
		var reg1 = /(\w)\1(\w)\2/g;
		console.log(str1.match(reg1));
		//尋找匹配到的位置
		console.log(str1.search(reg1));
		var str2 = "safsfsfskjskjfsfqwfwkfaaaasfksfskkkkkksdfsfsssss";
		console.log(str2.split(reg));//按照什麼進行拆分
		var str3 = "abacdefsf";
		console.log(str3.replace("a","b"));
		//bbacdefsf 只能替換一個沒有訪問全局的能力
		var reg3 = "/a/g";
		console.log(str3.replace(reg, "b"));
		console.log(str1.replace(reg1, function ($, $1, $2) {
			return $ + $2 + $1 ;
		}));
		//$ = aabb $1 = a $2 = b 第一個爲第一個全局表達式
		//後面都爲子表達式
		//全局匹配替換 加上了g
	
		//題
		//改成小駝峯式的寫法
		//the-first-name --> theFirstName

		var str4 = "the-first-name";
		var reg4 = /-(\w)/g;

		console.log(str4.replace(reg4, function ($ , $1) {
			return $1.toUpperCase();
		}));
		//匹配多少次這個function就執行多少次
		//強行替換$ $ 替換$
		//匹配? /  *匹配變成/? /*  //

		//正向預查 正向斷言
		var str5 = "abaaaa";
		var reg5 = /a(?=b)/g;//後面跟着b的那個a         a
		var reg6 = /a(?!b)/g;//後面不是跟着b的那個a  a a a a


		//非貪婪匹配的正則表達式 能少儘量別多
		//打破貪婪匹配後面加問號 ?

		var reg7 = /a*?/g;

		//字符串去重 RegExp
		var strw = "aaaaaaaaabbbbbcccdddddd";
		var reg = /(\w)\1*/g;
		console.log(strw.replace(reg , "$1"));

		//百度最後一道題
		//科學計數法
		//變成100.100.100
		//後面從前面查沒三位打一個點
		var str = "1000000000";
		var reg = /(?=(\B)(\d{3})+$)/g
		//正向預查,單詞邊界不爲空,倒數三位。
		console.log(str.replace(reg, "."));



		









	</script>

</body>
</html>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章