正則簡單的應用

正則表達式

正則表達式,是我們日常開發中經常會運用到的。當然對於一些複雜的正則表達式,當然可以通過網絡去搜索可以節約時間;對於運用到的一些簡單的,自己動手去寫可以節約一些時間,也是自己技術能力體現。對於正則的基礎知識我這裏就不做介紹了,要想了解基礎知識,可以去翻閱菜鳥教程它的表達會比寫的更加清楚,我主要給大家介紹如何寫一段性能比較好的正則表達式,也就是優雅的寫一段正則表達式,也是我們日常工作經常會用的。
  • 在這裏我分爲兩中一是斜槓匹配式,二是對象匹配式:
    1. 斜槓匹配(/^]$/):
    2. 對象正則:通過new一個正則對象new RegExp()
  • 其實大家心裏有個疑問,那就是正則的數據類型是什麼呢,其實我心裏也很好奇,我一起通過代碼來實現吧:
```
typeof  /[0-9]/ 
結果:"object"
type new RegExp('\s+', 'g')
結果:“object”

```

結論:通過上述代碼我可以知道正則表達式屬於引用類型,引用類型,我們都知道他是存放在堆內存裏,有關詳細關於內存管理的內容,會在接下來的博客進行介紹。
一:正則相關概念:

  • 元字符:\w(字母數字下劃線), \W(非字母數字下劃線),.(所有), * (0或多次),+(一次或多次), ?(0或1次), \n\r(換行回車) , \b\B(單詞邊界,非單詞邊界),\s\S\d\Detc.
  • 語法:普通正則,動態正則,分組匹配
    • 普通正則:/\s+/g全局匹配空格
    • 動態正則:
        var str = 'ne2'
         var n = /^[a-zA-Z0-9]+/
         var reg = new RegExp(n)//可以動態創建表達式;
         console.log( reg.test(str)) //true
    
  • 分組匹配
	  var str = 'ne2'
	   var n = /(^[a-zA-Z]+)(\d+$)/g
	   var reg = new RegExp(n)//可以動態創建表達式;
	   reg.test(str)
	   console.log(RegExp.$1, RegExp.$2) // ne 2

二: 日常工作中會運用到正則方法:

  • test()正則檢測
  • replace()正則替換
  • split() 正則切割
    上面兩種方法是我們工作可能經常會用的兩個方法
    當然還有其他方法:match/exec/search
    其實我給出上面六種方法中:test和exec是RegExp.prototype的原型方法,而其他四種則是正則原型的Symbol函數裏的方法,這種是無法直接通過RegExp.prototype.relace進行獲取的。有關symbol方法的理解也會放到後面章節去寫。
  • 屌絲們看圖:
    在這裏插入圖片描述
    1. test()是屬於正則方法,可以通過RegExp.prototype.test獲取方法;
const reg = /^\d+$/g
const value = 123213
console.log(reg.test(value))//true

上面就檢測是否是數字類型;
開發會用到的正則校驗:

  • 手機號:/^1[34578]\d{9}$/g 注:這個主要針對國內手機號用戶進行判斷,如果涉及到國際業務,可以採用該插件libphonenumber-js(github庫鏈接)
  • 郵箱: /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
  • 微信號:/^[a-zA-Z-]([-_a-zA-Z0-9]{5,19})+$/
  • url:/^(https?:\/\/)?[a-zA-Z-_]+\.?[a-zA-Z0-9-_]*\.[a-zA-Z_-]+/g可以根據業務需求去修改
  • 正整數/^[1-9]\d*$/
  • 用戶名:/^\w{4,16}/g 用戶名4到16位(數字,字母,下劃線,減號)
  • 中文校驗:/[\u4E00-\u9FA5]/g

2. replace()這個方法可進行正則替換
relace這個應用還是比較廣泛;

  • 替換空字符串:
      var str = 'scott nue jie typr kf ytr kfljei 126' 
	  var reg = new RegExp(/\s+/,'g')
	  str = str.replace(reg,' ')
	  console.log(str)// scottnuejietyprkfytrkfljei126
  • 手機號加密:
 replace(/(^\d{3})(\d{4})(\d{4}$)/g, "$1****$3")
  • 文本加密算法
 function textEncryption(text, targetStr, digit){
		targetStr = targetStr || '*';
		digit = digit || 4;
		text = text + '';
		var newTargetString = ''
		for(var i = 0;i<digit;i++){
			newTargetString += targetStr;
		}
		var len = text.length;
		var baseNumber = (len-digit)/2
		var firstNumber = Math.floor(baseNumber);
		var lastNumber = Math.ceil(baseNumber);
		var reg = new RegExp(`(^.{${firstNumber}})(.{${digit}})(.{${lastNumber}}$)`, 'g');
		return text.replace(reg, `$1${newTargetString}$3`);
	 }
  • replace(a,b),a,表示父級需要匹配替換的參數(正則|string), b,替換的類型,代碼如上;
  • replace(a,function(res,index){});
    a,表示父級需要匹配替換的參數(正則|string);
    res,表示正則匹配的字符
    index,正則匹配字符下標
	 var str = 'fhdsfj ksjdflkj jklsdjflk'
	 str =  str.replace(/j/g,function(res,index){
	  	console.log(res)
	  	console.log(index)
		return '文'+res
	  	
	  })
	 console.log(str)

在這裏插入圖片描述
參考文檔

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