詳細介紹正則表達式

          正則是獨立於編程語言的一個學科,用於解決模式匹配問題,Javascript提供了對於正則支持,此外,Java、c、python也都支持正則。正則能夠應用在:檢索,替換,爬蟲,論文查重等領域。javascript

實例化正則表達式對象html

  1. 字面量
    var pattern = /正則表達式/標記
    var pattern = /abc/igm

  2. 構造函數
    var pattern = new RegExp(「正則表達式」,「標記」);
    var pattern = new RegExp(「abc」,「igm」);
    標記:
    i ignoreCase 忽略大小寫
    g global 全局
    m multiline 多行
    u unicode 任何 Unicode 代碼點的轉義都會被解釋。
    y sticky 屬性反映了搜索是否具備粘性







正則表達式java

  1. 直接量
    abc 例如:/abc/ 查找目標串中是否含有abc
    python

  2. 字符類
    [abc] 例如:/[abc]/ 查找目標串中是否含有abc中任意一個字符
    [^abc] 例如:/[^abc]/ 查找目標串中是否含有除了abc以外任意一個字符
    [a-z] a~z中的任意一個字符
    \w 字母 [a-zA-Z0-9]
    \W 非字母 [^a-zA-Z0-9]
    \d 數字 [0-9]
    \D 非數字[^0-9]
    \s 空白符
    \S 非空白符








    web

    多行模式下
    ^ 以…開始 /^\d\w{3}\d$/ 覺得數字開頭,以數字結尾
    $ 以…結尾

    正則表達式

  3. 數量詞
    數量通常使用在子表達式(直接量,字符類,分組…)後
    /1[3578]\d{9}/
    {9} 重複9次
    {1,9} 重複1~9次
    {1,} 重複1次及以上
    {0,} 重複0次及以上
    * 等價於{0,}
    + 等價於{1,}
    ? 等價於{0,1}








    編程

    貪婪匹配
    默認是貪婪匹配
    {1,9} 優先匹配9次
    非貪婪匹配
    數量詞後添加?就成爲了非貪婪匹配
    {1,9}? 優先匹配1次




    數組

  4. 選擇
    子表達式中間添加"|"表示選擇
    例如:
    /hello|hi/


    編程語言

  5. 分組
    獲取目標字符串中全部的url,而且分別拿到協議,ip,port,路徑
    url 協議://ip:port/路徑

    svn

var pattern =
/(http|https|ftp|svn) \ : //((\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3})|(www.\w{2,}.com)):?(\d{2,5})(/[a-z0-9/]{2,})/ig
/() : //(()|()): ()()/

  1. 引用
    經過"\數字"對以前分組匹配結果的一種引用。\1 就表示對第一個分組匹配結果的引用

var str = 「12hello12」
var str = 「871wrold871」
var str = 「871wrold888」

var pattern = /(\d{2,})\w+\1/

API

1.實例屬性
RegExp.prototype.flags 標記
RegExp.prototype.source 正則字符串
RegExp.prototype.ignoreCase
RegExp.prototype.global
RegExp.prototype.multiline
RegExp.prototype.unicode
RegExp.prototype.sticky






這裏有個簡單的例子來直接的理解這些屬性的做用:

var pattern = /hello/igm;
console.log(pattern);// /hello/gim

console.log("source:",pattern.source);// source: hello
console.log("flags:",pattern.flags);// flags: gim
console.log("ignoreCase:",pattern.ignoreCase);// ignoreCase: true
console.log("global:",pattern.global);// global: true
console.log("multiline:",pattern.multiline);// multiline: true
console.log("unicode:",pattern.unicode);// unicode: false

2.實例方法

RegExp.prototype.test(str)

目標字符串中是否能夠知足正則表達式的匹配要求
支持全局匹配。當全局匹配的時候,會在正則表達式對象pattern上維 護一個變量 lastIndex,表示下次開始檢索的位置。
參數:字符串
返回值:boolean


RegExp.prototype.exec(str)

從目標字符串中獲取知足正則表達式匹配要求的子串。
支持全局匹配。當全局匹配的時候,會在正則表達式對象pattern上維護一個變量,lastIndex,表示下次開始檢索的位置。
參數:字符串
返回值:數組
數組元素爲匹配的結果
exec的返回值的數組中的第一個元素總體匹配的結果, 第二個元素爲第一個分組結果, 第三個元素爲第二個分組的結果
數組屬性index表示當前子串在目標串中的位置,input表示目標串,groups表示分組





如下是一個檢索網址的例子:

//檢索網址
var str = "hello , i am terry, my website is http://134.175.154.93:8888/personal/index.html, ftp url is ftp://172.16.0.2
0/webui , my phone 18812345432, my friend is larry ,his telephone is 13710009999,his web site is http://www.larry.com/p
ersonal/my.index.html , his email is larry@briup. com, my other first is jacky, his telephoen is 17751229900";
//網址的正則表達式
var a = /(http|https|ftp|svn)\:\/\/((\d{ 1,3}\.\d{ 1,3}\.\d{ 1,3}\.\d{ 1,3})|(www\.\w{ 2,}\.com))\:?(\d{ 2,5})?(\/[a-z0-9/]{ 2,
})/ig
let result = null;
while(result = a.exec(str)){ 
    console.log(result);
}

輸出的結果:

[
  'http://134.175.154.93:8888/personal/index',//總體的匹配結果
  'http',//第一個分組結果
  '134.175.154.93',
  '134.175.154.93',
  undefined,
  '8888',
  '/personal/index',
  index: 34,      //當前子串在目標串中的位置
  input: 'hello , i am terry, my website is http://134.175.154.93:8888/personal/index.html, ftp url is ftp://172.16.0.20/webui , my phone 18812345432, my friend is larry ,his telephone is 13710009999,his web site is http://www.larry.com/personal/my.index.html , his email is larry@briup. com, my other first is jacky, his telephoen is 17751229900',  //檢索的目標串
  groups: undefined//分組
]
[
  'ftp://172.16.0.20/webui',
  'ftp',
  '172.16.0.20',
  '172.16.0.20',
  undefined,
  undefined,
  '/webui',
  index: 93,
  input: 'hello , i am terry, my website is http://134.175.154.93:8888/personal/index.html, ftp url is ftp://172.16.0.20/webui , my phone 18812345432, my friend is larry ,his telephone is 13710009999,his web site is http://www.larry.com/personal/my.index.html , his email is larry@briup. com, my other first is jacky, his telephoen is 17751229900',
  groups: undefined
]
[
  'http://www.larry.com/personal/my',
  'http',
  'www.larry.com',
  undefined,
  'www.larry.com',
  undefined,
  '/personal/my',
  index: 206,
  input: 'hello , i am terry, my website is http://134.175.154.93:8888/personal/index.html, ftp url is ftp://172.16.0.20/webui , my phone 18812345432, my friend is larry ,his telephone is 13710009999,his web site is http://www.larry.com/personal/my.index.html , his email is larry@briup. com, my other first is jacky, his telephoen is 17751229900',
  groups: undefined
]

總結 這篇是我在學習js正則時總結的一些基礎,掌握!

相關文章
相關標籤/搜索