1. 程式人生 > >JS正則表示式(火星文)

JS正則表示式(火星文)


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>正則表示式(火星文)</title>
</head>
<body>
<input type="text" id="myText" placeholder="你要發言的內容">
<button onclick="send()">傳送訊息</button>
<textarea id="myArea" cols="30" rows="10"></textarea>
<script>
    // 正則表示式:
    // 它是一個功能非常非常非常非常非常強大的字串匹配功能
    // 有了它你就可以指定自己的規則, 然後去判斷某個字串是否符合你的規則(比如驗證郵箱, 賬號, 密碼, 電話, 身份證號 等格式)

    function send(){
        var str = document.getElementById("myText").value;

        var reg = /[中國共產黨政府習近平]/g;
        // 字串match方法, 裡面傳入一個正則表示式, 得到正則匹配出來的結果, 結果是一個數組
//        var resultStr = str.match(reg);
        // 字串replace方法, 第一個引數不光可以引數一個固定字元, 還可以傳入正則表示式來匹配, 字串裡的內容
        var resultStr = str.replace(reg, "*");
        document.getElementById("myArea").value = resultStr;
    }


    // 正則表示式 符號的意義
    /*
    * [] 匹配裡面任意一個字元
    * [1234567890] [0-9]  [\d]
    * [abc] [a-z]
    * - 代表一個範圍
    * 字元都是用ASCII碼來尋找的
    * */
    var str2 = "12345abc67";
    var reg2 = /[A-z]/g;
    console.log(str2.match(reg2));

    //  \ 斜槓的意義 (轉義)
    var str3 = "我是/haha";
    var reg3 = /\//g;
    console.log(str3.match(reg3));

    // ^ 房子蓋 匹配 以。。。開頭
    var str4 = "a201541030209";
    var reg4 = /^[a-z]/g; // 以a-z任意一個字元作為整個字串的開頭
    console.log(str4.match(reg4));

    // $ 以。。。結束
    var str5 = "小花好好學習8";
    var reg5 = /[0-9]$/g;
    console.log(str5.match(reg5));

    // .點 代表匹配 任意一個字元(佔位符) 除了\n以外
    // *   代表匹配 前面的表示式 1次 或 多次
    // 練習:要求匹配以abc任意一個開頭,並且 XYZ任意一個結尾的正則表示式
    var str6 = "c大大很棒棒Z";
    var reg6 = /^[abc].*[XYZ]$/g;
    console.log(str6.match(reg6));

    // {n} 代表匹配 前面表示式 n次
    // {n, m} 代表匹配前面表示式 最少n次 最多m次
    // {n, } 代表匹配前面表示式 最少n次
    // { , m} 代表匹配前面表示式 最多m次
    var str7 = "acd12535";
    var reg7 = /^[a-z]{3}/g; // 匹配a-z開頭字元3次 (因為有^ 必須是開頭連續3個如果被打斷, 則獲取不到)
    var reg7_1 = /^[a-z]{1,3}/g; // 比如以字元開頭,至少1次最多3次匹配
    console.log(str7.match(reg7_1));

    // 例:判斷使用者輸入的是否是電話號碼
    var str8 = "13040507890";
    var reg8 = /^1[345678][\d]{9}$/;
    console.log(str8.match(reg8));

    // 判斷郵箱格式 是否正確
    var str9 = "
[email protected]
"; var reg9 = /^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/; console.log(str9.match(reg9)); // 判斷身份證格式是否正確 var str10 = "21100919811130213131"; var reg10 = /^\d{15}$|^\d{18}$|^\d{17}(\d|x|X)$/g; console.log(str10.match(reg10)); var str11 = "<html><head><title>我是title</title></head><body>" + "<ul><li>1</li><li>2</li><li>3</li><li>4</li></ul></body></html>"; var reg11 = /<li>(\d)??<\/li>/g; console.log(str11.match(reg11)); </script> </body> </html>

.            任何字元
a?            a一次或一次也沒有
a*            a零次或多次
a+            a一次或多次
a{n}? a恰好 n 次
a{n,}?    a至少n次 
a{n,m}?    a至少n次,但是不超過m次
[abc]    a、b 或 c(簡單類)
[^abc]    任何字元,除了 a、b 或 c(否定)
[a-zA-Z]            a 到 z 或 A 到 Z,兩頭的字母包括在內(範圍)
[a-d[m-p]]    a 到 d 或 m 到 p:[a-dm-p](並集)
[a-z&&[def]]    d、e 或 f(交集)
[a-z&&[^bc]]    a 到 z,除了 b 和 c:[ad-z](減去)
[a-z&&[^m-p]]    a 到 z,而非 m 到 p:[a-lq-z](減去)
\d            數字:[0-9]
\D            非數字: [^0-9]
\s            空白字元:[ \t\n\x0B\f\r]
\S            非空白字元:[^\s]
\w            單詞字元:[a-zA-Z_0-9]
\W            非單詞字元:[^\w]
^            行的開頭
$            行的結尾
\b            單詞邊界
\B            非單詞邊界
\A            輸入的開頭
\G            上一個匹配的結尾
\Z            輸入的結尾,僅用於最後的結束符(如果有的話)
\z            輸入的結尾