js和java中正則表達式的易混淆點

  1. js中正則表達式的使用

    對錶單中的值進行正則表達式匹配通常有兩種方法:
    var reg = new RegExp(regStr);
    reg.test(value);

    以下:
    var reg = new RegExp(「\\d{3}」);
    reg.test(「abc123def」);

    結果:true
    注:new RegExp中傳的是正則表達式的字符串,\須要用\轉義。

    str.match(regex);      如」abc123def」.match(/\d{5}/);   結果:123
    注:match中傳的是正則表達式。不須要加」」,以/開頭和結束。\不須要轉義。

  2. js中對值的全匹配

    一般在寫網頁時要用js對錶單中的用戶名、Email等驗證。這時候驗證並非在value值中找到某一部分,而是要匹配所有。以下

    如上圖,若是用如下代碼驗證

    var reg = new RegExp(「[a-zA-Z]{6,8}」);
    reg.test(value)


    當6個如下字符時是不匹配的,6-8個時是匹配的,但8個以上時仍然是匹配的。
    js中正則表達式相關函數RegExp.test()和String.match()等函數都是在字符串中尋找是否有符合正則表達式的,而非字符串必定要和正則表達式想對應。
    因此若是想要按要求匹配,應該加上開始結束字符,開頭和結尾統一內容,正確的正則表達式:/^[0-9a-zA-Z]{6,8}$/

  3. java正則表達式的轉義

    java中轉義要轉兩層,好比要匹配字符\s在java中的匹配表示\\\\s
    第一層次:’\s’在正則表達式,轉義爲:‘\\s’
    第 二層次:在java中,這時轉的再也不是’\s’,而是’\\s’(其實就是java將代碼翻譯成正則表達式去匹配,因此這裏,java翻譯的是’ \\s’),而java的轉義符號也是’\’,因此java的匹配表達式變爲:’\\’第一個’\’,’\\’第二個’\’,最後加上’s’,因此獲得的 是:‘\\\\s’

  4. java中的matches()和matcher()的區別

    String對象和Pattern類都有matches()方法,參數不一樣,但二者匹配類型同樣,都是字符串與正則表達式互相匹配才爲真
    以下java代碼
    Pattern.matches(「ddd\\d{3}」, 「ddd12344″);
    返回是假,雖然字符串有正則表達式符合的,但沒有與所有字符串匹配。

    Pattern對象的matcher()方法則是在字符串中尋找匹配的部分。以下java代碼
    Pattern pattern = Pattern.compile(「ddd\\d{3}」);
    Matcher m = pattern.matcher(「ddd123ddd456″);
    while(m.find()){
      System.out.println(m.group());
    }
    返回結果是:
    ddd123
    ddd456 

    若是正則表達式是「^ddd\\d{3}$」,則不會有符合匹配的。
做者:華CC博客
出處: http://www.huahongbin.cn/?p=23 本人在不斷學習中,文章在表述和代碼方面若有不妥之處,歡迎批評指正。留下你的腳印,歡迎評論哦。你也能夠關注我,一塊兒學習哦!
相關文章
相關標籤/搜索