JavaScript-正則表達式


1.創建方式

構造函數創建

var str = 'hello world';
var reg1 = new RegExp('e','ig')
console.log(reg1)

參數1 正則表達式(不能有空格)
參數2 匹配模式:常用g(全局匹配;找到所有匹配,而不是第一個匹配后停止)和 i(忽略大小寫)

字面量方式創建

var reg2 = /o/gi;        檢測字符o,不區分大小寫,全局匹配

 

2.方法

test()

檢測字符串中是否包含定義字符模式

console.log(reg1.test(str));

exec()

檢索字符串中指定的值。匹配成功返回一個數組,匹配失敗返回null

console.log(reg1.exec(str));

["o", index: 0, input: "oweb", groups: undefined]
第 1 個元素是與 RegExpObject 的第 1 個子表達式相匹配的文本(如果有的話),            
第 2 個元素是與 RegExpObject 的第 2 個子表達式相匹配的文本(如果有的話),以此類推。
除了數組元素和 length 屬性之外,exec() 方法還返回兩個屬性。 index 屬性聲明的是匹配文本的第一個字符的位置。 input 屬性則存放的是被檢索的字符串 string。

match()

在字符串內檢索指定的值,匹配成功返回存放匹配結果的數組,否則返回null

console.log(str.match(reg1));

search()

在字符串內檢索指定的值,匹配成功返回第一個匹配成功的字符串片段開始的位置,否則返回-1.

var reg = /javascript/i;
console.log('hello Javascript Javascript Javascript'.search(reg));     //6

replace()

替換與正則表達式匹配的字串,並返回替換后的字符串。在不設置全局匹配g的時候,只替換第一個匹配成功的字符串片段。

var reg1=/javascript/i; 
var reg2=/javascript/ig;
console.log('hello Javascript Javascript Javascript'.replace(reg1,'js'));
//hello js Javascript Javascript
console.log('hello Javascript Javascript Javascript'.replace(reg2,'js'));
//hello js js js

split()

把一個字符串分割成字符串數組

    var reg1 = /cr/i;
   console.log('hello Javascript'.split(reg1));
   // ["hello Javas", "ipt"]

 

3.元字符(匹配的規則)

單個字符和數字

  • .

匹配除換行符意外的任意字符

    var str = "oweb";
    var reg = /./g;
    console.log(reg.exec(str));
// ["o", index: 0, input: "oweb", groups: undefined]

    var str2 = "www.baidu.com";
    var reg2 = /www\......\.com/g;
    console.log(reg2.exec(str2));
//["www.baidu.com", index: 0, input: "www.baidu.com", groups: undefined]
  • [ ]

匹配[ ]里面的任意一個字符

    var str = "4awebadsads";
    var reg1 = /[a-zA-Z0-9]/g;
    console.log(str.match(reg1));
// (11) ["4", "a", "w", "e", "b", "a", "d", "s", "a", "d", "s"]

    var str2 = "1s34";
    var reg2 = /[0-9][0-9][0-9]/;    // 匹配連續三個都是數字
    console.log(reg2.exec(str2));
// null    
  • [^]

所有不在這個范圍內的字符

    var str = "abd";
    var reg = /[^a-z]/g;
    console.log(reg.exec(str));

//null
  • \d 和 \D
    var str4 = "web";
    var reg4 = /\d/g; //匹配數字
    var reg5 = /\D/g; //非數字
    console.log(reg4.exec(str4)); //null
    console.log(reg5.exec(str4)); //w
  • \w 和 \W
var reg6 = /\w/g; //匹配數字 字母 下划線_ 
var reg7 = /\W/g; //匹配除數字 字母 下划線以外的任意字符
console.log(reg6.exec(str4)); //w
console.log(reg7.exec(str4)); //null
  • \s 和 \S
var reg8 = /\s/g; //空格 
var reg9 = /\S/g; //非空白字符
console.log(reg8.exec(str4)); //null
console.log(reg9.exec(str4)); //w
  • ^

以什么開頭

var str = "www."; 
var reg10 = /^www/g; // ^字符
console.log(reg10.exec(str));

//["www", index: 0, input: "www.", groups: undefined]
  • $

以什么結尾

var reg11 = /www\.$/g; //字符$ 
console.log(reg11.exec(str));

//["www.", index: 0, input: "www.", groups: undefined]

重復的字符

匹配前面的字符0個或1個

    var strs = "webr44546ere";
    var reg12 = /[0-9]?/g;
    console.log(reg12.exec(strs));

//["", index: 0, input: "webr44546ere", groups: undefined]     非貪婪模式
  • *

匹配0個或任意多個字符 --- 貪婪匹配

     var reg13 = /[a-z]*/g; //匹配小寫字母,0個或多個
    console.log(reg13.exec(strs));

// ["webr", index: 0, input: "webr44546ere", groups: undefined]
  • +

至少匹配一次

    var reg14 = /\d+/g;
    console.log(reg14.exec(strs));

//["44546", index: 4, input: "webr44546ere", groups: undefined]
  • {}

{10}:匹配連續的10個字符

    var stra = "11274567800";
    var rega = /^1\d{10}$/g; //匹配連續的10個數字
    console.log(rega.exec(stra));

//["11274567800", index: 0, input: "11274567800", groups: undefined]

{1, 4}:最少1個 最多4個    --- 貪婪模式

    var strb = "edg";
    var regb = /^[a-zA-z]{2,3}$/g;
    console.log(regb.exec(strb));

//["edg", index: 0, input: "edg", groups: undefined]
  • ||

或者

    var strc = "www.google";
    var regc = /www.baidu|google|ujiuye/g;
    console.log(regc.exec(strc));

//["google", index: 4, input: "www.google", groups: undefined]
  • ()

分組

    var strc = "www.google";
    var regc = /www.(baidu)|(google)|(ujiuye)/g;
    console.log(regc.exec(strc));

// ["google", undefined, "google", undefined, index: 4, input: "www.google", groups: undefined]

 

 

相關練習:

1.檢索字符串中是否不包含字母

    var reg = /[a-z]/ig;
    var str1 = 99;
    var str2 = "8u999";
    console.log(reg.test(str1));    //false
    console.log(reg.test(str2));    //true

2.去除字符串首尾空格

    var reg = /\s/g;
    var str = 'hello world';
    console.log(str.replace(reg, ''));

// helloworld

3.檢查用戶賬號

    function checkUser(str) {
        var re = /^[a-zA-z]\w{3,15}$/;
        if(re.test(str)) {
        console.log("正確");
        } else {
        console.log("錯誤");
        }
        }
        checkUser("alex_hah"); //調用

//正確

4.匹配11位手機號碼

    function checkPhone(num) {
        var reg = /^1\d{10}$/g
        if (reg.test(num)){
            console.log('正確');
        }else{
            console.log('錯誤');
        }
    }

    checkPhone(13192611098)

//正確

5.匹配電話號碼

驗證規則:區號加號碼,區號以0開頭,3位或者4位

號碼由7位或8位數字組成,區號與號碼之間可以無連接符,也可以"-"連接

    function checkPhone(num) {
        var reg = /^0\d{2,3}-?\d{7,8}$/;
        if(reg.test(num)){
            console.log("正確");
        }else{
            console.log("錯誤");
        }
    }

    checkPhone("095-57777777"); //調用

// 正確

6.驗證郵箱

驗證:把郵箱地址分成" 第一部分@第二部分 " 這樣,第一部分:由字母、數字、下划線、短線"-"、點號“.”組成;

第二部分:為一個域名,域名由字母、數字、短線"-"、域名后綴組成。

// 而域名后綴一般為.xxx或.xxx.xx, 一區的域名后綴一般為2 - 4 位, 如cn, com, net, 現在域名有的也會大於4位 

    function checkEmail(str) {
        var re = /^(\w-*\.*)+@(\w-?)+(\.\w{2,})+$/ ;
        if(re.test(str)) {
        console.log("正確");
        } else {
        console.log("錯誤");
        }
        }
        checkEmail("alex@cnblogs.cn"); //調用

// 正確

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM