js 第四課

正則表達式:RegExp對象

    正則表達式描述一個字符模式的對象,或者說用某種模式去匹配一類字符串的一個公式。

1.創建

    可以用RegExp構造函數直接量兩種方式。正則表達式直接量被包含在一對"/"中.

1         var partern1 = RegExp('\\d*');
2         //等價于
3         var partern1 = /\d*/;
4         var partern2 = RegExp('^[1-9]*$');
5         //等價于
6         var partern2 = /^[1-9]*$/;
RegExp

?在創建正則表達式時可以為其制定一個標志,來說明高級匹配模式的規則。

    當使用RegExp創建表達式對象時,需要指定的標志作為第二個參數傳入.

    當使用直接量創建表達式對象時,直接在標識表達式的結束位置"/"寫上標志.

標志含義
i執行匹配時忽略大小寫
g執行一個全局匹配,即找到所有匹配項,
m多行匹配模式

?標志可以自由搭配使用..........?

        var partern1 = RegExp('\\d*','g');//等價于var partern1 = /\d*/g;var partern2 = RegExp('^\\S$','i');//等價于var partern2 = /^\S$/i;var partern3 = RegExp('^\\w$', 'ig');//等價于var partern3 = /^\w$/ig;


2.語法規則:

  1.正則表達式由字符直接量,元符號和各種轉義序列組成。

    字符直接量:匹配它本身。

    除了字母字符和數字外,可以通過"\"開頭的轉義序列支持非字母字符。

  直接量字符  ?匹配
  字母或數字字符   自身
  \o  NUL字符
?  \t  水平制表符?
  ?\v?  垂直制表符
  ?\n?  換行符
  ?\r?  回車符
  ?\f?  換頁符
  ?\xnn?  由十六進制nn指定的拉丁字符
  ?\uxxxx?  由十六進制xxxx指定的Unicode字符
  ?\cx?  控制字符x

?    在“[]”內放入單獨的直接量組成字符類,一個字符類可以和它所包含的任何單個字符相匹配eg:[abc] 匹配:“a”,“b”,“c”

  字符類  匹配  
  [...]  括號內包含的任意字符
  [^...]  括號內不包含的任意字符
  .  除換行符和其他Unicode行中字符之外的其它字符
  \w  大小寫字母,數字,下劃線
  \W  非大小寫字母,數字,下劃線
  \s  空白字符
  \S  非空白字符
  \d  數字字符
  \D  非數字字符

?    eg:/\d\d/ : 兩位數字。? /[bB]ug/ : bug,Bug.? /a.b/ : abb,?anb~ 等 。 /[^0-9]/ : 任何單個非數字。

?

    上面給的是單位字符,下面給出多位字符

  符號  含義
  {m,n}  匹配前一項最少m次,最多n次
  {m,}  匹配前一項最少m次
  {m}  匹配前一項m次
    匹配前一項0次或者1次
  +  匹配前一項最少1次 =>{1,}
  *  匹配前一項0次或多次,=>{0,}

?    eg: /\d{1,3}/ : 匹配1~3位數字。 /a{3}/ : 匹配aaa.? /a?/ : 匹配‘’和‘a'

  注意:在重復匹配時正則會盡可能多的匹配更多的字符:貪婪匹配。如果在表達式后面加上元符號“?”就會進行費貪婪匹配,匹配盡可能少的字符

  eg: /a+/匹配’aaaab' 時會匹配前四位a ,?? /a+?/則只會匹配第一位a

?

    正則表達式還可以指定選擇項,為表達式分組引用前面子表達式所匹配的字符

  符號  含義
  |  選擇,匹配符號左邊的子表達式或者右邊的子表達式。
  (...)  組合,將幾個項目組合為一個單元,這個單元可以被重復字符所使用,還可以被引用
  (?:...)  只組合,為一個單元,但不能被引用
  \n

  n是一個數字,表示:表達式中第n個可以被引用組合,從左到右按書寫順序排序。

  \n 匹配與其所引用的分組匹配字符一樣的字符

  eg:/a|b/ : 'a','b'? . /(a|b)B\1/ :aBa,bBb .?? /(?:m+)(a|b)B\1/ : \1匹配a|b而不是m+

?

?    正則表達式還有一些字符轉義序列匹配的是字符串中的特定位置?? : 錨字符

  字符  含義
  ^  匹配字符串的開頭。在多行匹配模式中,匹配一行的開頭。
  $  匹配字符串的結尾。在多行匹配模式中,匹配一行的結尾
  \b

參考:http://www.w3school.com.cn/js/jsref_regexp_begin.asp

匹配一個詞語(單詞)的邊界

\b 元字符匹配單詞邊界。

在單詞邊界匹配的位置,單詞字符后面前面不與另一個單詞字符直接相鄰。請注意,匹配的單詞邊界并不包含在匹配中。換句話說,匹配的單詞邊界的長度為零。(不要與 [\b] 混淆。)

如果未找到匹配,則返回 null

提示:\b 元字符通常用于查找位于單詞的開頭或結尾的匹配。

  \B  匹配所有非詞語(單詞)邊界的字符
? ? (?:p)  正前向匹配,要求接下來的字符與模式p匹配,但匹配的結果不包含p匹配的字符。
  (?!p)  反前向匹配,要求接下來的字符不與模式p匹配

??  eg: /^Bugs/ : 匹配Bugs Bug,不匹配Bug Bug . /s$/ : 匹配 Bug Bugs 不匹配Bugs Bug .

     /^Bugs Bug$/ : 匹配Bugs Bug,不匹配Bug Bug .?

/\bm/ 匹配 "moon" 中的 'm';

/oo\b/ 不匹配 "moon" 中的 'oo',因為 'oo' 后面的 'n' 是一個單詞字符;

/oon\b/ 匹配 "moon" 中的 'oon',因為 'oon' 位于字符串的末端,后面沒有單詞字符;

/\w\b\w/ 不匹配任何字符,因為單詞字符之后絕不會同時緊跟著非單詞字符和單詞字符。

    <script type="text/javascript">var str = "Bugs Bug";var patt1 = /\bBug/g;document.write(str.match(patt1));//Bug,Bug
</script>

      /Bugs(?: Bug)/ : 匹配Bugs Bug 不匹配BugsBug?

注意:如果想匹配元符號或者具有特殊含義的符號時,只需要在相應的字符前面加上轉義符反斜線“\”即可。

?

3. 正則表達式的屬性

  source :是一個只讀的字符串,存放正則表達式的文本。

    <script type="text/javascript">var str = "Bugs Bug";var reg = new RegExp('^(Bugs Bug){0,}$', 'igm');var test = reg.source;alert(test); //^(Bugs Bug){0,}$ </script>

  global : 是一個只讀的布爾屬性,表示:正則表達式是否啟用了全局匹配模式。

    <script type="text/javascript">var str = "Bugs Bug";var reg = new RegExp('^(Bugs Bug){0,}$', 'igm');var reg1 = new RegExp('^(Bugs Bug){0,}$', 'm');alert(reg1.global);//falsealert(reg.global);//true</script>

  ignoreCase : 同global類似,只讀的布爾值,表示正則表達式是否啟用了忽略大小寫的模式。

?  multiline :? 只讀屬性,表示正則表達式是否啟用了多行匹配的模式。

?  lastIndex : 是一個可讀可寫的整數,記錄了在全局匹配模式下,在字符串中下一次開始匹配的位置,

?

?4.用于匹配模式的String方法

  replace方法 :

        var str = "Bugs&Bug";
var reg3 = new RegExp('&', 'g');alert(str.replace(reg3,' '));//Bugs Bug

  search方法 : 以正則表達式為參數,返回第一個與之匹配的子字符的開始位置,如果沒有任何子字符與之匹配返回-1.

    <script type="text/javascript">var str = "I Love Bugs Bug";var reg = new RegExp('B.*s', 'igm');//匹配Bugsalert(str.search(reg)); //7alert(str.search(/.(?:Bug)/));//6 //匹配Bugs前面的空格</script>

注意:如果參數不是正則表達式,則參數會被傳遞給RegExp的構造函數,變為正則表達式,同時,search并不支持全局匹配模式,總是返回找到的第一個子字符的位置.

?在replace方法的第二個參數中,可以使用符號“$”加數字來引用這些分組所匹配的內容。

    <script type="text/javascript">var str = 'my name is?Bugs Bug';var regstr =str.replace(/^.*\?([a-zA-Z]+.*)+$/i, 'my name is:"$1"');alert(regstr); //my name is:"Bugs Bug"</script>

  方法match接受一個正則表達式作為參數(如果不是正則表達式,會轉換成正則表達式) 返回一個包含匹配結果的數組,數組的第一個元素是匹配的子字符串

從第二個元素開始,是正則表達式的分組所匹配的內容,如果正則表達式被設置成了全局匹配模式,則返回的數組就是字符串中所有匹配的子字符串,

    <script type="text/javascript">function test() {var str = "my name is?Bugs Bug";var strreg = str.match(/^.*\?(([a-rA-Rt-zT-Z]*).*([a-zA-z]*))$/);alert(strreg); //my name is?Bugs Bug,Bugs Bug,Bug,var strreg2 = str.match(/^.*\?([a-rA-Rt-zT-Z]*).*([a-zA-z])*$/g);alert(strreg2); //my name is?Bugs Bug            
        }test();</script>

如果match作用于一個非全局模式的正則表達式,則返回的數組會有兩個額外的

屬性 :index:包含所匹配的字符串在源字符串中的位置,

    input:保存了源字符串的一個副本。

            alert(strreg.index);//0alert(strreg.input); //my name is?Bugs Bug 
        }test();

split方法,有一個接受正則表達式的參數

    <script type="text/javascript">function test() {var str = "my|name\\is?Bugs Bug";alert(str.split(/\||\\|\?| /));//my,name,is,Bugs,Bug}test();</script>

?

?RegExp定義了兩個用于模式匹配的方法,他們的行為和前面介紹的String方法,類似。第一個是exec方法,和match方法相似,只是它接受一個字符串的參數,在此字符串中進行匹配查找,返回一個數組,與match方法不同的是:無論正則表達式是否開啟了全局匹配模式,exec方法每次只匹配一個結果,返回數組的第一個元素是匹配的子字符串,從第二個元素開始是正則表達式中各個分組所匹配的內容,

只是當正則表達式開啟了全局匹配模式時,每次成功匹配后,正則表達式的lastIndex屬性都會被改寫以標識此次匹配的子字符串的位置,在下一次執行exec方法進行匹配時,會從lastIndex屬性標識的位置開始查找,當沒有任何匹配時,lastindex屬性會被重置為0,并返回null,這個特性使程序員反復匹配一個字符串從而得到所有匹配的子字符串的所有信息。

    <script type="text/javascript">function test() {var str = "my|name\\is?Bugs Bug";var reg = /(Bugs) (Bug)/g;var a;while ((a = reg.exec(str)) != null) {document.write(a.join(' ') + '<br/>'); //Bugs Bug Bugs Bug
            }var str = "a=1&b=2+c=3|d=4@e=5%f=6";var reg = /([a-z])=([0-9])/g;var a;while ((a = reg.exec(str)) != null) {document.write(a.join(' ') + '<br/>');/*           a=1 a 1b=2 b 2c=3 c 3d=4 d 4e=5 e 5f=6 f 6*/}}test();</script>


另一個方法是test,接受一個字符串作為參數,然后進行匹配檢測,如果字符串能夠進行匹配,則返回true,否則false,

    <script type="text/javascript">function test() {            var reg = /([A-Za-z])/;alert(reg.test("Bugs Bug"));//truealert(reg.test("123"));//false
        }test();</script>

常用的正則表達式:(未驗證)

中文字符[\u4e00-\u9fa5]
雙字節字符(包括漢字)[^\x00-\xff]
E-mail地址/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/i
HTML標記/<(.*)>.*<\/\1>|<(.*)\/>/
URL 地址/^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$/i
字符串首尾的空格/(^\s*)|(\s*$)/
顏色代碼/\#[a-fA-F0-9]{6}/
身份證號碼/^\d{15}(\d{2}[xX0-9])?$/
電話號碼/^((\(\d{3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}$/
整數/^(\+|\-)?[1-9]\d*$/
浮點數/^(\+|\-)?(0|[1-9][0-9]*)(\.[0-9]*[1-9])?$/

轉載于:https://www.cnblogs.com/wjshan0808/archive/2013/05/19/3086567.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/378370.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/378370.shtml
英文地址,請注明出處:http://en.pswp.cn/news/378370.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

第二章 列表和元組

第二章 列表和元組 在Python中&#xff0c;最基本的數據結構為序列&#xff08;包括列表、元組、字符串等&#xff09;&#xff08;sequence&#xff09; 列表是可以修改的&#xff0c;而元組不可以 Python支持一種數據結構的基本概念&#xff0c;名為容器&#xff08;contain…

linux下mac風格菜單欄,ubuntu 8.04 安裝mac風格菜單

ubuntu 8.04 安裝mac風格菜單發布時間:2008-07-13 00:22:22來源:紅聯作者:bindex這只是一份草案文檔&#xff0c;它可能會導致一些計算機故障。引言這份指南假定你沒有在電腦上編譯過其他程序&#xff0c;并且&#xff0c;假定你使用的是Ubuntu Gusty。1.使用deb包安裝 32位系統…

解析法實現一元線性回歸、多元線性回歸以及數據模型可視化操作

目錄【1】解析法實現一元線性回歸python列表實現利用Numpy實現利用TensorFlow實現數據和模型可視化【2】解析法實現多元線性回歸利用Numpy實現需要用到的NumPy數組運算函數數據和模型可視化繪制空間點集&#xff1a;繪制空間平面圖&#xff1a;繪制線框圖并且與散點圖對比&…

帶有示例的Python File readlines()方法

文件readlines()方法 (File readlines() Method) readlines() method is an inbuilt method in Python, it is used to get all lines from the file, the method is called with this object (current file stream/IO object) and returns all available lines in the file, w…

32位系統win2008+mssql2008 6G內存折騰紀實

十年沒搞硬件了&#xff0c;現在計算機發展到大硬盤大內存的時代了。一直都少搞服務器配置、運營&#xff0c;以前弄服務器都是普通的PC來當服務器。公司原來的一個業務系統用的是mssql2000好幾年了&#xff0c;由于業務數據越積壓越多最大的一張表已經有7000多萬條記錄了&…

case使用 上下篇

上篇 Case具有兩種格式。簡單Case函數和Case搜索函數。 --簡單Case函數 CASE sexWHEN 1 THEN 男WHEN 2 THEN 女 ELSE 其他 END --Case搜索函數 CASE WHEN sex 1 THEN 男WHEN sex 2 THEN 女 ELSE 其他 END這兩種方式&#xff0c;可以實現相同的功能。簡單Case函數的寫法相對比…

第三章 字符串

第三章 字符串% 字符串是不可變的&#xff0c;所有的元素賦值和切片賦值都是非法的 Python提供了多種字符串格式設置方法 yanyu "hello, %s I like %s age is %s" beyond ("beyond","band",23) yanyu % beyond#結果為&#xff1a;hello, bey…

【視覺項目】【day5】8.25號實驗記錄(修完BUG,28張測試圖,13個樣本,四張測試圖誤判,這比之前效果好很多了)

目錄修改完BUG后的程序以及效果優化思路&#xff0c;增強正確識別率&#xff08;待驗證&#xff09;修改完BUG后的程序以及效果 修改代碼后的測試結果&#xff1a;(利用連通域面積將明顯比本張測試圖的瓶子要小的模板提前去除&#xff0c;減少誤判) 這樣下來&#xff0c;28張測…

linux kernel and user space通信機制,Linux內核空間與用戶空間通信機制地研究.doc

實用文案標準文檔Linux內核空間與用戶空間通信機制的研究Linux kernel space and user space communication mechanism摘 要Linux 是一個源碼開放的操作系統&#xff0c;無論是普通用戶還是企業用戶都可以編寫自己的內核代碼&#xff0c;再加上對標準內核的裁剪從而制作出適合自…

前臺用js、jquery出現錯誤很多是由于IE緩存

例如&#xff1a;當你用jquery進行異步請求數據時&#xff0c;如果瀏覽器發現請求的地址不變&#xff0c;或者參數也不改變的情況下 IE默認是取原來的緩存中的數據&#xff0c;而不進行重新請求數 解決的方法是是在地址欄的后面加上一個隨機參數值&#xff0c;IE發現地址改變&a…

python 示例_帶有示例的Python date timetuple()方法

python 示例Python date.timetuple()方法 (Python date.timetuple() Method) date.timetuple() method is used to manipulate objects of date class of module datetime. date.timetuple()方法用于操作模塊datetime的日期類的對象。 It is an instance method which means …

WebC.BBS 項目參與新人必讀

開發環境: 采用Visual Studio 2010&#xff0c;MVC版本采用Asp.Net MVC3&#xff0c;數據庫采用Sql2005 2008,擴展技術包括jQuery。 SVN的相關信息&#xff1a; SVN-Url&#xff1a;svn://svn.cyqdata.com/project_bbs 賬戶申請&#xff1a;請將自己的密碼發給組長&#xff0c;…

第四章 字典

第四章 字典{鍵:值,名字:電話號碼} 映射&#xff1a;通過名稱來訪問其各個值的數據結構 列表&#xff1a;將一系列值組合成數據結構并通過編號來訪問各個值 字典是Python中唯一的內置映射類型&#xff0c;其中的值不按順序排列&#xff0c;而是存儲在鍵下 鍵可能是數、字符串…

利用梯度下降法求解一元線性回歸和多元線性回歸

文章目錄原理以及公式【1】一元線性回歸問題【2】多元線性回歸問題【3】學習率【4】流程分析&#xff08;一元線性回歸&#xff09;【5】流程分析&#xff08;多元線性回歸&#xff09;歸一化原理以及每種歸一化適用的場合一元線性回歸代碼以及可視化結果多元線性回歸代碼以及可…

linux x64 asm 參數傳遞,NASM匯編學習系列(1)——系統調用和參數傳遞

0. 說明本學習系列代碼幾乎完全摘自&#xff1a;asmtutor.com&#xff0c;如果英文可以的(也可以用谷歌瀏覽器翻譯看)&#xff0c;可以直接看asmtutor.com上的教程系統環境搭建&#xff1a;(我用的是ubuntu18.04.4 server&#xff0c;安裝gcc、g)sudo apt install nasmsudo apt…

Javascript之創建對象(原型模式)

我們創建的每個函數都有一個prototype(原型)屬性&#xff0c;這個屬性是一個指針&#xff0c;指向一個對象&#xff0c;它的用途是包含可以有特定類型的所有實例共享的屬性和方法。 prototype就是通過構造函數而創建的那個對象的原型對象。使用原型的好處就是可以讓所有對象實例…

treeset java_Java TreeSet pollLast()方法與示例

treeset javaTreeSet類pollLast()方法 (TreeSet Class pollLast() method) pollLast() method is available in java.util package. pollLast()方法在java.util包中可用。 pollLast() method is used to return the last highest element and then remove the element from thi…

第五章 條件、循環及其他語句

第五章 條件、循環及其他語句 再談print和import print現在實際上是一個函數 1&#xff0c;打印多個參數 用逗號分隔&#xff0c;打印多個表達式 sep自定義分隔符&#xff0c;默認空格 end自定義結束字符串&#xff0c;默認換行 print("beyond",yanyu,23)#結果為…

兩種方法將Android NDK samples中hello-neon改成C++

一、第一種方法&#xff1a;1.修改helloneon.c 中代碼 a.將 char* str; 改為 char str[512] {0}; b.將 asprintf(&str, "FIR Filter benchmark:\nC version : %g ms\n", time_c); 改為 sprintf(str, "FIR Filter benchmark:\nC ve…

【視覺項目】【day6】8.26關于matchTemplate()以及NCC的思考整理

NCC與matchTemplate()函數中match_method TM_CCOEFF_NORMED是否一樣&#xff1f; 先看公式&#xff1a; TM_CCOEFF_NORMED NCCTM_CCOEFF_NORMED:歸一化的相關性系數匹配方法 NCC:normalized cross correlation:歸一化互相關系數 公式是一樣的。 參考&#xff1a; 模板匹配的幾…