1. 程式人生 > >JavaScript正則應用(基礎)

JavaScript正則應用(基礎)

正則表示式概念

正則表示式,又稱規則表示式。(英語:Regular Expression,在程式碼中常簡寫為regex、regexp或RE),電腦科學的一個概念。正則表通常被用來檢索、替換那些符合某個模式(規則)的文字。

正則表示式是跟具體語言(比如JavaScript)無關的。因為正則表示式是用來處理字串問題的,基本上每門語言都有字串型別,那麼也都會支援正則表示式的。正則表示式是分流派的,也跟實現引擎有關。而JavaScript用到的正則表示式的語法,是市面常見語言都支援的核心子集

基本語法

1 表示式形式:

var reg = / pattern / flags;

2 JavaScript 寫法:

  • 字面量表達式:/正則的規則/識別符號
  • 通過建構函式生成:new RegExp()
var str = "好像sdaa324上飛機大13"var reg = /13/;   //字面量表達式
//或者var reg = new RegExp("13")   建構函式
alert(reg.test(str))//彈出true

3 JavaScript應用:

  • reg.test(str)返回一個布林值
  • string.match(正則規則)返回一個類陣列。
    • 上方法匹配返回的類陣列,擁有index(匹配在字串中的索引)input(母字串)屬性。在加g全域性匹配後屬性消失。
  • string.replace(正則規則,替換的字串或者函式)字串替換
    函式要返回一個字串,接受三個引數:1.匹配的內容。 2.下標。 3.源字串
var str = "121241xx1231241xx1231"
var reg = /xx/g;
str.replace(reg,"替換")   //字串變為=》121241替換1231241替換1231
str.replace(reg,function(a,b,c){
    console.log(a,b,c)   
    //xx   0   121241xx1231241xx1231
    //xx   15  121241xx1231241xx1231
})

正則核心

正則表示式是由兩個/符號包裹起來的,兩個/裡面的(上面的pattern)就是需要的任何簡單或者是複雜的正則表示式。而在第二個/後面是一個或者是多個標誌(flags),用來標明正則表示式的行為

flags:識別符號有以下五種行為:

  • g:表示全域性(global)模式,即在匹配到第一個後繼續匹配
  • i:忽略(ignore)大小寫
  • m:便是多行(multiline)模式,即到達一行時繼續查詢下一行
  • y:(ES6新增的粘連修飾符)也是全域性匹配,不過第二次會接著上一次匹配停止的地方開始。
  • u:(ES6新增)

replace()經典用法!

var str = "first 第二部分"
var reg = /(\w+)\s(第二部分)/g
console.log(str.replace(reg,"$2 $1"))  //$2 $1代表正則的子集, 互換位置即可實現兩者互換!

基礎規則

元字元

  1. 轉義符號\
    可轉義特殊符號區別於普通字元的意義。
  2. 常用特殊字元:
    • .匹配除了換行以外其他所有字元 !
    • \n換行
    • \rtab製表符
    • \d數字0-9
    • \D非數字
    • \s空格
    • \S非空格
    • \w字元(數字、字母、_ )
    • \W非字元(與\w互補)
    • \b獨立部分(單詞邊界: 起始 結束 連詞符)
    • \B非獨立部分
  3. 量詞 ,一般由{}包裹
    • {0,n}出現0-n次
    • {0,1}有或者沒有,可簡寫為
    • {0,}0-正無窮,簡寫為*
    • {1,}1-正無窮,簡寫為+
    • 貪婪匹配:
      1. 預設量詞取能匹配的最大值!
    • 非貪婪匹配
      1. {}?量詞取能匹配的最小值!
  4. 識別符號:
    • g全域性匹配
    • i忽略大小寫
    • m多行匹配
    • yes6新增粘連修飾符
    • ues6新增
  5. 起始符、結束符
    • ^規定以特定字元開頭
    • $規定以特定字元結尾
  6. 子集:()
    被括號括起來部分將的當做一個整體進行量詞處理後,匹配!
    例如:
var str = "ababbabbb";
var reg = /ab+/gi;   //匹配(1-無窮)個b
console.log(str.match(reg))  //ab  abb  abbb

var reg1 = /(ab)+/gi;  //匹配(1-無窮)個ab
console.log(str.match(reg1))  //abab ab

遇到多層巢狀子集時,先匹配外層,再匹配內層!

  • 範圍詞:
    1. []
      - 如[a-z]表示範圍在小寫字母的任意字元
      - [A-Za-z0-9]表示範圍在大小寫字母或者數字中的任意字元
    2. 漢字匹配範圍:[\u4e00-\u9fa5]
    3. [^1]取反,即匹配不是1的字元!
var str = "12"
var reg = /[^1|2/g
console.log(str.match(reg))  //2

常見字串正則匹配

/(\w)\1+/g 其中:\1代表第一個子集,如果不加,將匹配整個字串!
var str = "aaabbbcccdddfffwwwqqqq"
var reg = /(\w)\1+/g  
console.log(str.match(reg))
// [aaa,bbb,ccc,ddd,fff,www,qqqq]
取最長子串
var str = "aaabbbbbbcccc"
var reg = /(\w)\1+/g;
var obj,num;
var leng =0;
while((obj=reg.exec(str)) !=null){
    if(obj[0].length>leng){
        leng = obj[0].length;
        num = obj[0]
    }
}
console.log(num)// bbbbbb

或者

var str = "aaabbbbbbcccc"
var reg = /(\w)\1+/g;
var arr= str.match(reg);
var leng = 0
var num;
for(var i=0;i<arr.length;i++){
    if(arr[i].length>leng){
        leng = arr[i].length;
        num =arr[i]
    }
}
console.log(num)//bbbbbb
字串模板,對接json資料
var dic = {
    name:"chenqian",
    age:21,
    gfriend:1
}
var str = "大家好,我叫&name&,今年&age&,我有&gfriend&個女朋友,哈哈!"
var reg = /\&(\w+)\&/g;
str = str.replace(reg, function(match,$1){
    console.log($1)//name age gfriend
    return dic[$1];
})
console.log(str) //大家好,我叫chenqian,今年21,我有1個女朋友,哈哈!
敏感詞過濾
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="Author" content="">
    <title>敏感詞替換</title>
    <style>
        *{margin:0;padding:0;font-family: Microsoft YaHei,serif;}
        li{list-style: none;}
        span{
            display: block;
        }
        .time{
            color:#888;
        }
    </style>
</head>
<body>
    <input type="text" id="txt">
    <button>傳送</button>
    <ul>
        <!--<li><span class="time">2017-11-27 21:48</span>
            <span>臥槽</span>
        </li>-->
    </ul>
    <script>
        var Txt = document.getElementById("txt"),
            send = document.getElementsByTagName("button")[0],
            ul = document.getElementsByTagName("ul")[0],
            reg = /傻逼|我操|操|操你媽|你媽|我日|日/g;

        send.onclick=function () {
            var val = Txt.value;
            if(val){
                val = val.replace(reg,function (match) {
                    console.log(match)
                    var str = "";
                    for(var i=0;i<match.length;i++){
                        str += "*";
                    }
                    return str;
                })
                //獲取時間
                var date = new Date(),
                    hh = addZero(date.getHours()),
                    mm = addZero(date.getMinutes()),
                    ss = addZero(date.getSeconds());

                var time = hh + ":" + mm + ":"+ss;

                ul.innerHTML += "<li><span class='time'>"+time+"</span><span>"+val+"</span></li>"

            }
        }
        function addZero(n) {
            return n<10?"0"+n:""+n;
        }
    </script>
</body>
</html>
登入驗證、號碼、qq號等…
var reg = {
    tel:/^1[1-3]\d{9}$/, 
    qq:/^[1-9]\d{4,10}$/,
    id:/^^[1-9]\d{5}$/,
    url : /^(http|https):\/\/[\S]*$/,
    email : /^[1-9A-Za-z]\w{5,19}@[1-9a-z]{2,7}\.[a-z]{2,5}$/,
    user : /^[1-9a-zA-Z_]\w{5,19}$/,
    pwd : /^[\[email protected]#$%^&*()_+\-=/{}\[\]:";',.\/]{6,20}$/
}

相關推薦

JavaScript應用基礎

正則表示式概念 正則表示式,又稱規則表示式。(英語:Regular Expression,在程式碼中常簡寫為regex、regexp或RE),電腦科學的一個概念。正則表通常被用來檢索、替換那些符合某個模式(規則)的文字。 正則表示式是跟具體語言(比如

JavaScript表示式基礎、分組、懶惰匹配、反向引用和零寬斷言

進階 懶惰匹配 分組 反向引用 零寬斷言 練習 基礎 常用字元總結: ^ 匹配行的開始位置 $ 匹配行的結束位置 \b 匹配單詞的開始或結束位置 . 匹配除換行符之外的任意字元 \w 匹配單詞字元(包括字母、數字、

表示式基礎

^: 1)放某字元前面,表示以什麼開頭(如:^a,表示以a開頭的所有字串)   2)在方括號裡用'^'表示不希望出現的字元,'^'應在方括號裡的第一位。(如:%[^a-zA-Z]% ,表示兩個百分號中不應該出現字母) $:放某字元後面,表示以什麼結尾   *:放某字元後面,表示沒有或更多,還

詳解JavaScript表示式

本文是JavaScript正則表示式的第三篇文章,若是對正則表示式陌生的話,可以看我之前的兩篇文章。 詳解正則表示式(一) 詳解正則表示式(二) 貪婪模式和非貪婪模式 1、貪婪模式 在匹配成功的情況下,儘可能多的匹配。而JavaScript預設的就是貪婪模式。話不多說,直

詳解JavaScript表示式

RegExp 物件表示正則表示式,它是對字串執行模式匹配的強大工具 這篇文章主要是對正則表示式有一個全面的瞭解,學完之後,當再次看到一些比較複雜的正則表示式的時候就可以逐步分析了。當然,再加上一段時間的練習,相信你自己也可以學會怎麼使用正則表示式的。 1、例項化正則表示式的兩種方

JavaScript表示式字串例項方法search

還可以使用字串例項本身的方法來確定制定的正則表示式物件是否在字串中有匹配的詞。請看如下程式碼: function  doSearch(){                  //定義一個字串                  var str = "I have never

表示式基礎2

從左到右進行計算,並遵循優先順序順序,這與算術表示式非常類似。 相同優先順序的從左到右進行運算,不同優先順序的運算先高後低。下表從最高到最低說明了各種正則表示式運算子的優先順序順序: 運算子 描述 \ 轉義符 (), (?:), (?=), []

python之表示式基礎

前言 在向網頁進行了提交請求之類的之後,我們可以得到了網頁的返回內容,裡面自然而然會有我們想要的資料,但是html元素文字這麼多,我們不可能一 一去找我們需要的資料,這時就需要用到正則表示式了,正則表示式是學爬蟲必須學的內容,而且不止python可以用,jav

機器學習基礎三十 —— 線性迴歸、regularized線性迴歸、區域性加權線性迴歸LWLR

1. 線性迴歸 線性迴歸根據最小二乘法直接給出權值向量的解析解(closed-form solution): w=(XTX)−1XTy 線性迴歸的一個問題就是有可能出現欠擬合現象,因為它求的是具有最小均方誤差(LSE,Least Square Erro

表示式re

1、re.match(pattern, str, flag) 從str的第一個字母開始匹配,若不是開頭的,儘管屬於str內,則無法匹配。 2、貪婪匹配與非貪婪匹配(?) 貪婪匹配:嘗試匹配儘可能多的字元 >>> sentence = """You said "why?" and I

表示式數量詞

public class Demo4_Regex { /** * Greedy 數量詞 X? X,一次或一次也沒有 X* X,零次或多次 X+ X,一次或多次 X{n} X,恰好 n 次 X{n,} X,至少 n 次 X{n,m} X,至少 n 次

表示式RegEx——快速參考

https://ahkcn.github.io/docs/misc/RegEx-QuickRef.htm#%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%EF%BC%88RegEx%EF%BC%89%E2%80%94%E2%80%94%E5%BF%

MySQL 表示式REGEXP

正則表示式用來匹配文字的特殊的串(字元集合)(匹配文字,將一個模式(正則表示式)與一個文字串進行比較)。 LIKE 和 REGEXP之間的重要差別 LIKE 匹配整個列,如果被匹配的文字在列值中出現,LIKE 將不會找到它,相應的行也不會被返回(除非使用萬用字元)。而 REGEXP 在列

js表示式2

找到以某個字串開頭的字串 var myReg=/^(abc)/gim; 如果不加m,那麼只找一行,而加了m可以找到每行中以該字串開頭的匹配文字。 如: abcsfsdfasd7890hklfahskfkaluiop7890-7890782ksdlafkasdnfklsdnf;lsabc

jsp頁面驗證手機號的表示式最新

jsp頁面校驗手機號(js): function checkMobile(){           var checkRole =/^0?(13[0-9]|15[012356789]|18[012346789]|1

Python :表示式1

#正則表示式 需要呼叫的模組 : import re #函式引數: patter :需要匹配的正則表示式 string:需要匹配的字串 flags :標誌位,用於控制正則的匹配方式 { re.I :忽略大小寫 var = re.match("www","Www.baidu.com.",

常用表示式copy

一、校驗數字的表示式 數字:^[0-9]*$ n位的數字:^\d{n}$ 至少n位的數字:^\d{n,}$ m-n位的數字:^\d{m,n}$ 零和非零開頭的數字:^(0|[1-9][0-9]*)$ 非零開頭的最多帶兩位小數的數字:^([1-9][0-9]*)+(\.[0

Python爬蟲之表示式1

廖雪峰正則表示式學習筆記 1:用\d可以匹配一個數字;用\w可以匹配一個字母或數字; '00\d' 可以匹配‘007’,但是無法匹配‘00A’; ‘\d\d\d’可以匹配‘010’; ‘\w\w\d’可以匹配‘py3’; 2:.可以匹配任意字元; 'py.'可以匹配'pyc'、

常用表達

//QQ的規律 5-11位 開頭是不為0的數字var regQQ = /^[1-9]\d{4,10}$/;//手機 11位 有號段 13[0-9] 14[57] 15[0-9] 17[0-9] 18[0-9]var regMobile = /^(13[0-9]|14[57]|15[0-9]|17[0-9]|1

JavaScript之ECMAScript筆記基礎

ECMAScript,DOM,BOM javascript分為三部分: ECMAScript,DOM,BOM Brendan Eich完全建立了ECMAScript; DOM,BOM也可以算他建立的,不過他只是給出了規則 DOM(docum