2.40-正則表達式

正則表達式

匹配字符串中字符組合的模式

^\w+([-+.]\w+)*@\w+([-+])

正則測試工具

https://tool.oschina.net/regex

1 正則表達式的使用

1.1 定義

// RegExp
var regexp = new RegExp(/456/);
console.log(regexp); //    /456/
// 直接量
var regexp2 = /abc/;

1.2 正則表達式對象方法 test()

正則表達式對象方法 test(),檢測某字符串是不是符合規則

// 返回值true表示有符合規則的字符組合 
console.log(regexp2.test('abcfg')); //true
console.log(regexp2.test('bacfg')); //false
console.log(regexp.test(456)); //true
console.log(regexp.test('456')); //true

2 正則表達式的特殊字符

2.1 邊界符

^ 匹配行首的文本 以誰開頭

$ 匹配行尾的文本 以誰結束

var reg = /asd/; // 只要包含asd這個字符串就返回true
console.log(reg.test('asdgfd'));//true
var reg2 = /^asd/;  
console.log(reg2.test('asdgfd'));  //true
console.log(reg2.test('gasdfd')); //false
var reg3 = /^asd$/; //精確匹配
console.log(reg3.test('asdgfd'));  //false
console.log(reg3.test('gasdfd')); //false
console.log(reg3.test('asd')); //true
console.log(reg3.test('asdasd')); //false
var reg4 = /asd$/; //以asd結尾
console.log(reg4.test('asdasd')); //true

2.2 字符類

[] 表示有一系列字符可以選擇,只需要匹配一個就可以 。

var rg = /[xyz]/; // 字符串有xyz三個其中一個字符
console.log(rg.test('abcd')); // false
console.log(rg.test('abxcd')); // true
console.log(rg.test('abycd')); // true
console.log(rg.test('xabcdz')); // true
var rg2 = /^[xyz]$/; // 只能是x或者y或者z
console.log(rg2.test('xx')); // false
console.log(rg2.test('x')); // true
console.log(rg2.test('xy')); // false
console.log(rg2.test('z')); // true
var rg3 = /^[0-9a-z]$/; // - 範圍
console.log(rg3.test(3)); //true
console.log(rg3.test('a3')); // false
// 中括號的^表示取反
var rg4 = /^[^0-9a-z]$/;
console.log(rg4.test('5')); // false
console.log(rg4.test('a')); // false
console.log(rg4.test('A')); //true

2.3 量詞類

  *  

  +

  ?

  {n}

  {n,}

  {n,m}
var rg = /^c*$/; // *表示可以出現0次或多次 >=0 相當於 {0,}
console.log(rg.test('')); //true
console.log(rg.test('c')); //true
console.log(rg.test('cc')); //true
console.log(rg.test('adfg')); //false
var rg = /^c+$/; // +表示可以出現1次或多次 >=1 相當於{1,}
console.log(rg.test('')); // false
console.log(rg.test('c')); // true
console.log(rg.test('cc')); // true
console.log(rg.test('adfg')); //false
var rg = /^c?$/; // ?表示可以出現1次或0次 0 || 1 相當於{0,1}
console.log(rg.test('')); // true
console.log(rg.test('c')); // true
console.log(rg.test('cc')); // false
console.log(rg.test('adfg')); //false
var rg = /^c{3}$/; // 重複3次
console.log(rg.test('')); // false
console.log(rg.test('c')); // false
console.log(rg.test('cc')); // false
console.log(rg.test('ccc')); // true
var rg = /^c{3,}$/; // 至少3次
console.log(rg.test('')); // false
console.log(rg.test('c')); // false
console.log(rg.test('cc')); // false
console.log(rg.test('ccccc')); // true
var rg = /^c{3,5}$/; // 至少3次,最多6次
console.log(rg.test('')); // false
console.log(rg.test('c')); // false
console.log(rg.test('ccc')); // true
console.log(rg.test('cccccc')); // false

var rg = /^[a-zA-Z0-9_-]{6,16}$/;
console.log(rg.test('aa')); // false
console.log(rg.test('a123445')); // true

2.4 其他混合使用

var rg = /^[xyz]$/; // 只能是x或y或z
var rg2 = /^xyz{3}$/;
console.log(rg2.test('xyzxyzxyz')); //false
console.log(rg2.test('xyzzzz')); //true
var rg3 = /^(xyz){3}$/;
console.log(rg3.test('xyzxyzxyz')); //true
console.log(rg3.test('xyzxyzxyzxyz')); //false
實例:

檢測用戶名輸入是否合法,合法提示用戶名合法字顏色顯示綠色;不合法,提示用戶名不合法,顏色是紅色

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        .right {
            color: green;
        }

        .wrong {
            color: red;
        }
    </style>
</head>
<body>
    <input type="text" id="uname" name="" id=""><span id='tip'></span>
    <script>
        var rg = /^[a-zA-Z0-9_-]{6,16}$/;
        var uname = document.querySelector('#uname');
        var tip = document.querySelector('#tip');
        uname.onblur = function() {
            if (rg.test(this.value)) {
                tip.className = 'right';
                tip.innerHTML = '用戶名合法';
            } else {
                tip.className = 'wrong';
                tip.innerHTML = '用戶名不合法';
            }
        }
    </script>
</body>
</html>

2.5 預定義類

  \d === [0-9] 

  \D === [^0-9] 

  \w === [a-zA-Z0-9_]

  \W === [^a-zA-Z0-9_]

  \s === [\t\r\n\v\f]   匹配空格

  \S === [^\t\r\n\v\f]  匹配非空格字符

3 正則表達式替換

replace() stringObj.replace(substr/rg,replacement)

var str = 'hello world';
//var newStr = str.replace('hello','hi');
var newStr = str.replace(/hello/, 'hi');
console.log(str); //hello world 原數組不變,產生新的數組
console.log(newStr); //hi world  

實例:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>
    <textarea name="" id="msg" cols="30" rows="10"></textarea>
    <button>提交</button>
    <script>
        var btn = document.querySelector('button');
        var tarea = document.querySelector('textarea');
        btn.onclick = function() {
            // g全局匹配  i忽略大小寫  gi  默認只會匹配一個
            tarea.value = tarea.value.replace(/激情|gay/gi, '**')
        }
    </script>
</body>

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