首頁 web前端 js教程 分享正規表示式一些常用的例子

分享正規表示式一些常用的例子

Jun 28, 2017 am 10:59 AM
常見 總結 表達式

正規表示法常用總結

正規表示式,又稱正規表示法、常規表示法。 (英文:Regular Expression,在程式碼中常簡寫為regex、regexp或RE),電腦科學的一個概念。正規表示式使用單一字串來描述、匹配一系列符合某個句法規則。在許多文字編輯器裡,正規表示式通常被用來檢索、取代那些符合某個模式的文字。

正規表示式,有木有人像我一樣,學了好幾遍卻還是很懵圈,學的時候老明白了,學完了忘光了。好吧,其實還是練的不夠,所謂溫故而知新,可以為師矣,今天就隨我來複習一下這傲嬌的正則表達式吧。

為啥要有正規表示式呢?其實就是因為計算機笨(這話不是我說的),比如123456@qq.com,我們一看就是郵箱,可是計算機不認識啊,所以我們就要用一些計算機認識的語言,來製定好規則,告訴它符合這個規則的就是個信箱,這樣計算機就能幫我們找到對應的東西了。所以正則就是用來設定規則,來完成我們需求的一些操作的,比如登入驗證啦,搜尋指定的東西啦等等,說太多都是多餘,直接看正題吧。

定義正規:


#1 var re = new RegExp(“a”); //RegExp物件。參數就是我們想要訂定的規則。有一種情況必須用這種方式,下面會提到。

2 var re = /a/; // 簡寫方法建議使用效能較好不能為空不然以為是註釋,

   

正則常用的方法 

1 test() :在字串中找出符合正規則的內容,若查找到回傳true,反之回傳false.

用法:正規.test(字串) 

範例:判斷是否為數字


var str = '374829348791';

#var re = /\ D/; // \D代表非數字

if( re.test(str) ){ // 回傳true,代表在字串中找到了非數字。

alert('不全數是數字');

}else{

#alert('全是數字');

}

   

正規表示式中有很多符號,代表不同的意思,用來讓我們去定義不同的規則,例如上面\D,還有下面的這些:

\s : 空格

\S : 非空格

\d : 數字

\D : 非數字

\w :字符( 字母,數字,底線_ )

\W : 非字符例子:是否有不是數字的字符

(下面會根據例子,依次講一些常用的字符,最後再作總結。字母的位置), 如果搜尋失敗就回傳-1 

用法:字串.search(正規)

在字串中尋找複合正規則的內容。忽略大小寫:i——ignore(正規中預設是區分大小寫的如果不區分大小寫的話,在正規的最後加標識i )

範例:在字串中找字母b,且不區分大小寫

 

var str = 'abcdef';

var re = /B/i;

// var re = new RegExp('B','i'); 也可以這樣寫

alert( str.search(re) ); // 1

   

3 match() 在字串中搜尋複合規則的內容,搜尋成功就回傳內容,格式為數組,失敗就回傳null。

用法: 字串.match(正規)

量詞:+ 至少出現一次符合不確定的次數(符合就是搜尋尋找的意思)

全域符合:g ——global(正規中默認,只要搜尋到複合規則的內容就會結束搜尋)

範例:找出指定格式的所有數字,如下找到123,54,33,879

#var str = 'haj123sdk54hask33dkhalsd879';

   

##var re = /\d+/g; // 每次符合至少一個數字且全域匹配如果不是全域匹配,當找到數字123,它就會停止了。就只會彈出123.加上全域匹配,就會從開始到結束一直去搜尋符合規則的。如果沒有加號,配對的結果就是1,2,3,5,4,3,3,879不是我們想要的,有了加號,每次配對的數字就是至少一個了。

alert( str.match(re) ); // [123,54,33,879]

   

4 replace() :尋找符合正規則的字串,就替換成對應的字串。返回替換後的內容。

用法: 字串.replace(正規,新的字串/回呼函數)(在回呼函數中,第一個參數指的是每次符合成功的字元)

| : 或的意思。

例子:敏感词过滤,比如 我爱北京天安门,天安门上太阳升。------我爱*****,****上太阳升。即北京和天安门变成*号,

一开始我们可能会想到这样的方法:


var str = "我爱北京天安门,天安门上太阳升。";

var re = /北京|天安门/g; // 找到北京 或者天安门 全局匹配

var str2 = str.replace(re,'*');

alert(str2) //我爱**,*上太阳升

//这种只是把找到的变成了一个*,并不能几个字就对应几个*。

   

要想实现几个字对应几个*,我们可以用回调函数实现:


var str = "我爱北京天安门,天安门上太阳升。";

var re = /北京|天安门/g; // 找到北京 或者天安门 全局匹配

var str2 = str.replace(re,function(str){

alert(str); //用来测试:函数的第一个参数代表每次搜索到的符合正则的字符,所以第一次str指的是北京 第二次str是天安门 第三次str是天安门

var result = '';

for(var i=0;i

result += '*';

}

return result; //所以搜索到了几个字就返回几个*

});

alert(str2) //我爱*****,***上太阳升

//整个过程就是,找到北京,替换成了两个*,找到天安门替换成了3个*,找到天安门替换成3个*。

replace是一个很有用的方法,经常会用到。

正则中的字符

():,小括号,叫做分组符。就相当于数学里面的括号。如下:


var str = '2013-6-7';

var re1 = /\d-+/g; // 全局匹配数字,横杠,横杠数量至少为1,匹配结果为: 3- 6-

var re1 = /(\d-)+/g; // 全局匹配数字,横杠,数字和横杠整体数量至少为1 3-6-

var re2 = /(\d+)(-)/g; // 全局匹配至少一个数字,匹配一个横杠 匹配结果:2013- 6-

同时,正则中的每一个带小括号的项,都叫做这个正则的子项。子项在某些时候非常的有用,比如我们来看一个栗子。

例子:让2013-6-7 变成 2013.6.7


var str = '2013-6-7';

var re = /(\d+)(-)/g;

str = str.replace(re,function($0,$1,$2){

//replace()中如果有子项, //第一个参数:$0(匹配成功后的整体结果 2013- 6-),

// 第二个参数 : $1(匹配成功的第一个分组,这里指的是\d 2013, 6)

//第三个参数 : $1(匹配成功的第二个分组,这里指的是- - - )

return $1 + '.'; //分别返回2013. 6.

});

alert( str ); //2013.6.7

//整个过程就是利用子项把2013- 6- 分别替换成了2013. 6. 最终弹出2013.6.7

match方法也会返回自己的子项,如下:


var str = 'abc';

var re = /(a)(b)(c)/;

alert( str.match(re) ); //[abc,a,b,c]( 返回的是匹配结果 以及每个子项 当match不加g的时候才可以获取到子项的集合)

[] : 表示某个集合中的任意一个,比如 [abc] 整体代表一个字符 匹配 a b c 中的任意一个,也可以是范围,[0-9] 范围必须从小到大 。

[^a] 整体代表一个字符 :^写在[]里面的话,就代表排除的意思

例子:匹配HTML标签 比如

hahahah
找出标签

var re = /<[^>]+>/g; //符合左括號中間至少一個非右括號的內容(因為標籤裡面還有屬性等一些東西),然後匹配右括號var re = /<[\w\W]+>/g; //匹配左括號中間至少一個字元或非字元的內容,然後匹配右括號// 其實就是找到左括號,然後中間可以有至少一個內容,一直到找到右括號就代表是一個標籤。

轉義字元

\s : 空格

\S : 非空格

\d : 數字

\D : 非數字

\w : 字元( 字母,數字,底線_ )

#\W : 非字元

.  :任意字元

#\. : 真正的點

\b : 獨立的部分( 起始,結束,空格)

#\B : 非獨立的部分

關於最後兩個來看個栗子:


var str = 'onetwo';

var str2 ="one two";

var re = /one\b/; // e後面必須是獨立的可以是起始,空格,或結束

alert( re.test(str) ); //false

alert ( re.test(str2) );//true

   

#範例:寫一個用class名稱取得節點的函數:

我們之前可能看過這樣的函數:


function getByClass(parent,classname){

if(parent.getElementsByClassName){

return parent.getElementsByClassName(classname);

}

else{

var results = new Array();//用來儲存所有取到的class為box的元素

var elems = parent.getElementsByTagName("*");

for(var i =0;i

#if(elems[i].className==classname){

results.push(elems[i]);

}

}

#return results;

}

}

   

其實這是有問題的,例如它如果一個標籤裡面有兩個class,或存在相同名字的class,例如

,
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

總結Linux系統中system()函數的用法 總結Linux系統中system()函數的用法 Feb 23, 2024 pm 06:45 PM

Linux下system()函數的總結在Linux系統中,system()函數是一個非常常用的函數,它可以用來執行命令列指令。本文將對system()函數進行詳細的介紹,並提供一些特定的程式碼範例。一、system()函數的基本用法system()函數的聲明如下:intsystem(constchar*command);其中,command參數是一個字符

PHP程式設計有哪些常見的模板引擎? PHP程式設計有哪些常見的模板引擎? Jun 12, 2023 am 09:50 AM

最近幾年,PHP編程中的模板引擎已經成為了PHP開發的重要組成部分,方便了程式設計師進行頁面開發和管理。本文將介紹PHP程式設計中常見的模板引擎。 SmartySmarty是一個比較常用的PHP模板引擎,它支援快取模板、外掛模組和自訂函數等一系列功能。 Smarty的語法十分靈活,能夠解決PHP變數與HTML標記的結合難題,使得PHP語言更適用於模板化的設計。而且,S

在H5開發中常見的position屬性的應用場景 在H5開發中常見的position屬性的應用場景 Dec 27, 2023 am 10:08 AM

H5開發中position屬性的常見應用場景,需要具體程式碼範例在H5開發中,CSS的position屬性非常重要,它控制元素在網頁中的定位方式。透過合理應用position屬性,我們可以實現頁面佈局的靈活性和美觀性。在本文中,我們將介紹position屬性的常見應用場景,並透過具體的程式碼範例來說明。 Static(靜態定位):position屬性的預設值為st

如何解決Python的表達式語法錯誤? 如何解決Python的表達式語法錯誤? Jun 24, 2023 pm 05:04 PM

Python作為一種高階程式語言,易於學習和使用。一旦需要編寫Python程式時,無法避免地遇到語法錯誤,表達式語法錯誤是常見的一種。在本文中,我們將討論如何解決Python的表達式語法錯誤。表達式語法錯誤是Python中最常見的錯誤之一,它通常是由於錯誤的使用語法或缺少必要組件而導致的。在Python中,表達式通常由數字、字串、變數和運算子組成。最常見的

PHP程式設計有哪些常見的超級全域變數? PHP程式設計有哪些常見的超級全域變數? Jun 12, 2023 am 09:31 AM

超級全域變數是PHP中非常重要的概念,它可以在程式中存取到任何地方的變數值,而無需使用函數或其他方法來傳遞變數。在本文中,我們將討論PHP程式設計中常用的幾個超級全域變數。 $_GET$_GET是用來收集HTML表單提交的資料的超級全域變數之一。透過$_GET,我們可以取得指定URL中的查詢字串參數,這些參數可以被用於頁面的資料過濾或資料查詢等操作。例如,當

常見的Ajax控制項有哪些?深入了解其特點和功能 常見的Ajax控制項有哪些?深入了解其特點和功能 Jan 17, 2024 am 11:11 AM

深入了解Ajax控制:常見的有哪些?介紹:在現代Web開發中,Ajax(AsynchronousJavaScriptandXML)成為了一種流行的技術,它可以實現網頁局部刷新,提升使用者體驗。而在開發中,我們通常使用Ajax控制來簡化和加速我們的開發流程。本文將深入了解Ajax控件,介紹一些常見的控件及其功能。一、jQueryAjax:jQueryA

在C和C++中,逗號(comma)的用法是用來分隔表達式或語句 在C和C++中,逗號(comma)的用法是用來分隔表達式或語句 Sep 09, 2023 pm 05:33 PM

在C或C++中,逗號「,」有不同的用途。在這裡我們將了解如何使用它們。逗號作為運算符。逗號運算符是一個二元運算符,它計算第一個操作數,然後丟棄結果,然後計算第二個運算符並傳回值。逗號運算子在C或C++中的優先權最低。範例#include<stdio.h>intmain(){  intx=(50,60);  inty=(func1(),func2());}這裡60將被指派給x。對於下一語句,將會先執行func1(

介紹C語言中的指數函數表達式 介紹C語言中的指數函數表達式 Feb 18, 2024 pm 01:11 PM

C語言中指數函數表達式的寫法介紹及代碼範例什麼是指數函數指數函數是數學中一類常見的函數,可以表示為f(x)=a^x的形式,其中a為底數,x為指數。指數函數主要用來描述指數成長或指數衰減的情況。指數函數的程式碼範例在C語言中,我們可以使用數學庫中的pow()函數來計算指數函數,以下是一個範例程式:#include

See all articles