本篇文章為大家帶來了關於javascript的相關知識,其中主要介紹了正規表示式的相關問題,而正規表示式是一個特定的格式化模式,用於驗證各種字串是否符合這個特徵,進而實現高階的文字查找、取代、截取內容等操作,希望對大家有幫助。
相關推薦:javascript教學
##正規表示式(Regular Expression,簡稱regexp)
正規表示式的發展史
#正規表示式的表現形式
String物件中的match()方法除了可在字串內檢索指定的值外,還可以在目標字串中根據正規符合所有符合要求的內容,符合成功後將其儲存到陣列中,符合失敗則傳回false。
為了讓讀者更好的理解正規物件的獲取,以匹配特殊字元「^」、「$」、「*」、「.」和「\」為例進行比較講解。
注意
建構函數方式與字面量方式建立的正則對象,雖然在功能上完全一致,但它們在語法實作上有一定的區別,前者的pattern在使用時需要對反斜線(\)進行轉義。而後者的pattern在編寫時,要放在定界符“/”內,flags標記則放在結尾定界符之外
注意
字元“-”在通常情況下只表示一個普通字符,只有在表示字符範圍時才作為元字元來使用。 「-」連字符表示的範圍遵循字元編碼的順序,如「a-Z」、「z-a」、「a-9」都是不合法的範圍。【案例】限定輸入內容
程式碼實作想法:
寫HTML,設定一個年(份)和月(份)的文字框,以及一個查詢按鈕。 取得操作的元素對象,對表單的提交進行驗證。 驗證年份, 正規:/^\d{4}/ 。 驗 證 月 份 , 正 則 : / ( ( 0 ? [ 1 − 9 ] ) ∣ ( 1 [ 012 ] ) ∣ ( 1 [ 012 ] ) 文字方塊取得焦點,去除提示方塊的顏色。文字方塊失去焦點,去除輸入內容的兩端的空白,並進行驗證。程式碼實作
nbsp;html> <meta> <title>限定输入内容</title> <style> input[type=text]{width: 40px;border-color: #bbb;height: 25px;font-size: 14px;border-radius: 2px;outline: 0;border: #ccc 1px solid;padding: 0 10px;-webkit-transition: box-shadow .5s;margin-bottom: 15px;} input[type=text]:hover, input[type=text]:focus,input[type=submit]:hover{border: 1px solid #56b4ef; box-shadow: inset 0 1px 3px rgba(0,0,0,.05),0 0 8px rgba(82,168,236,.6); -webkit-transition: box-shadow .5s;} input::-webkit-input-placeholder {color: #999; -webkit-transition: color .5s;} input:focus::-webkit-input-placeholder, input:hover::-webkit-input-placeholder {color: #c2c2c2; -webkit-transition: color .5s;} input[type=submit]{height: 30px; width: 80px; background: #4393C9; border:1px solid #fff;color: #fff;font:14px bolder; } </style><script> function checkYear(obj) { if (!obj.value.match(/^\d{4}$/)) { obj.style.borderColor = 'red'; result.innerHTML = '输入错误,年份为4位数字表示'; return false; } result.innerHTML = ''; return true; } function checkMonth(obj) { if (!obj.value.match(/^((0?[1-9])|(1[012]))$/)) { obj.style.borderColor = 'red'; result.innerHTML = '输入错误,月份为1~12之间'; return false; } result.innerHTML = ''; return true; } var form = document.getElementById('form'); // <form>元素对象 var result = document.getElementById('result'); // <p>元素对象 var inputs = document.getElementsByTagName('input'); // <input>元素集合 form.onsubmit = function() { return checkYear(inputs.year) && checkMonth(inputs.month); }; inputs.year.onfocus = function() { this.style.borderColor = ''; }; inputs.month.onfocus = function() { this.style.borderColor = ''; }; if (!String.prototype.trim) { String.prototype.trim = function() { return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); // \uFEFF字节顺序标记;\xA0不换行空白 }; } inputs.year.onblur = function() { this.value = this.value.trim(); checkYear(this); }; inputs.month.onblur = function() { this.value = this.value.trim(); checkMonth(this); }; </script> RegExp類別中的方法test()方法:偵測正規表示式與指定的字串是否相符。
符合成功時,test()方法的回傳值為true,否則傳回false。
偵測正規物件的模式修飾符
#RegExp類別中還有一些屬性,用於偵測目前正規物件所使用的模式修飾符,以及指定下一次符合的起始索引等。 以下為了讀者更好的理解這些屬性的使用,以實作空格的匹配為例進行示範。
search()方法:可以傳回指定模式的子字串在字串首次出現的位置,相對於indexOf()方法來說功能更強大。
split()方法:用於根據指定的分隔符號將字串分割成字串數組,其分割後的字串陣列中不包括分隔符號。
當分隔符號不只一個時,需要定義正規物件才能夠完成字串的分割操作。
注意
當字串為空時,split()方法傳回的是一個包含一個空字串的陣列“[“”]” ,如果字串和分隔符號都是空字串,則傳回一個空數組“[]”。
動手實作
密碼強度驗證
#密碼強度驗證條件:
① 長度
②長度>6位,而且包含數字、字母或其他字元中的一種,密碼強度為「低」。
③長度>6位,而且包含數字、字母或其他字元中的二種,密碼強度為「中」。
④長度>6位,而且包含數字、字母或其他字元中的三種及以上,密碼強度為「高」。
提出問題:符合一個連續出現的字符,如 6個連續出現的數字「458925」。
解決方案1:正規物件/\d\d\d\d\d\d/gi。
存在的問題:重複出現的「\d」既不便於閱讀,書寫又繁瑣。
解決方案2:使用限定符(?、 、*、{ })完成某個字元連續出現的匹配。正規物件/\d{6}/gi。
當點字符(.)和限定符連用時,可以實現匹配指定數量範圍的任意字符。
正規在實現指定數量範圍的任意字元匹配時,支援貪婪匹配和惰性匹配兩種方式。
在正規表示式中,被括號字元「()」括起來的內容,稱為“子表達式”。
#小括號實作了符合catch和cater,如果不使用小括號,則變成了catch和er
未分組時,表示符合2個c字元;而分組後,表示符合2個「bc」字串。
捕獲:將子表達式匹配到的內容儲存到系統的快取區的過程。
非捕獲:不將子表達式的匹配內容存放到系統的快取中,使用(?:x)實作。
String对象的replace()方法,可直接利用$n(n是大于0的正整数)获取捕获内容,完成对子表达式捕获的内容进行替换的操作。
可以使用”(?:x)”的方式实现非捕获匹配
在编写正则表达式时,若要在正则表达式中,获取存放在缓存区内的子表达式的捕获内容,则可以使用“\n”(n是大于0的正整数)的方式引用,这个过程就是“反向引用”。
零宽断言:指的是一种零宽度的子表达式匹配,用于查找子表达式匹配的内容之前或之后是否含有特定的字符集。
分类:分为正向预查和反向预查,但是在JavaScript中仅支持正向预查,即匹配含有或不含有捕获内容之前的数据,匹配的结果中不含捕获的内容。
正则表达式中的运算符有很多。在实际应用时,各种运算符会遵循优先级顺序进行匹配。正则表达式中常用运算符优先级,由高到低的顺序如下表。
【案例】内容查找与替换
代码实现思路:
代码实现
nbsp;html> <meta> <title>内容查找与替换</title> <style> p{float:left;} input{margin:0 20px;} </style> <p>过滤前内容:<br> <textarea></textarea> <input> </p> <p>过滤后内容:<br> <textarea></textarea> </p> <script> document.getElementById('btn').onclick = function () { // 定义查找并需要替换的内容规则,[\u4e00-\u9fa5]表示匹配任意中文字符 var reg = /(bad)|[\u4e00-\u9fa5]/gi; var str = document.getElementById('pre').value; var newstr = str.replace(reg, '*'); document.getElementById('res').innerHTML = newstr; }; </script>
相关推荐:javascript学习教程
以上是JavaScript正規表示式,這篇就夠了的詳細內容。更多資訊請關注PHP中文網其他相關文章!