搜尋
首頁web前端js教程JS基礎系列之正規表示式

正規表示式是個很屌的東東,今天在這裡只是簡單的給剛接觸JS的人普及一下,裡面若有爭議的地方歡迎大家留言!

JS基礎系列之正規表示式

1.1 什麼是正規表示式

正規表示式(regular expression)是一個描述字元模式的對象,ECMAScript的RegExp 類別表示正規表示式,而String和RegExp都定義了使用正規表示式進行強大的模式匹配和文字擷取與替換的函數。

正規表示式用於對字串模式匹配及檢索替換,是對字串執行模式匹配的強大工具。

1.2 正規表示式的作用

正規表示式主要用來驗證客戶端的輸入資料。

使用者填寫表單點選按鈕之後,表單就會被傳送到伺服器,在伺服器端通常會用PHP、ASP.NET、JSP等伺服器腳本對其進行進一步處理。因為客戶端驗證,可以節約大量的伺服器端的系統資源,並且提供更好的使用者體驗。

二、建立正規表示式==(123)==

要使用正規表示式,必須先建立正規表示式對象,有2種建立對象的方式:

2.1 方式1:使用關鍵字new建立

var patt = new RegExp(pattern,modifiers);



參數1:正規表示式的模式。字串形式

參數2:模式修飾符。用於指定全域匹配、區分大小寫的匹配和多行匹配

<script type="text/javascript">
  /*
   创建了一个正则表达式
   参数1:模式是:girl,意思是说可以匹配 "girl"这样的字符串
   参数2:模式修饰符:gi g代表全局匹配 i代表不区分大小写
  */
 var pa = new RegExp("girl", "gi");
  //测试参数中的字符串"你好我的girl" 是否与匹配模式匹配。
  var isExist = pa.test("你好我的girl"); // 在本例中,是匹配的,这个字符串包含girl,所以返回true
  alert(isExist); //true
</script>



2.2 方式2:使用正規表示式直接量

var pa = /pattern/modifiers;



兩個/中間的表示正規表示式的模式,最後一個/的後面是模式修飾符

例如:上面的例子可以這樣寫var pa = /girl/gi;

注意:這個時候模式和模式修飾符都能再添加雙引號或單引號

<script type="text/javascript">
 var pa = /girl/gi;
 alert(pa.test("厉害了我的girl")); //true
</script>



三、正規表示式模式修飾符==(126)==

JavaScript中共有3種模式修飾符:g i u

 g:表示全局。意思是說會對一個字串進行多次匹配。如果不寫g則只匹配一次,一旦匹配成功,則不會再次匹配

 i:表示忽略大小寫。意思是說在匹配的時候不區分大小寫

 u:表示可以多行匹配。

四、正規表示式方法詳解==(127)==

常用到的正規表示式方法有兩個test() 和exec()

4.1 test()方法

test(字串)

 參數:要符合的字串

 回傳值:匹配成功回傳true,失敗回傳false

在只想知道目標字串與某個模式是否匹配,但不需要知道其文字內容的情況下,使用這個方法非常方便。因此, test() 方法常被用在 if 語句中。

<script type="text/javascript">
 var pa = /girl/gi;
 if(pa.test("厉害了我的girl")){
  alert("这个女孩和你很配");
 }else {
  alert("你注定没有女孩去匹配");
 }
</script>



4.2 exec()方法

exec(字串):此方法為專門為捕獲群組而設計的

 參數:要符合的字串

 回傳值:傳回的是一個陣列。如果不符合則傳回null

 關於傳回值陣列的說明:

 它確實是Array的實例。

 但是這個陣列有兩個額外的屬性:index和input

 index:表示符合的字串在來源字串中的索引

 input:表示符合的來源字串。

 數組的第一個項目是與整個模式匹配的字串,其他項目是與模式中捕獲組匹配的字符串

 如果沒有捕獲組,則數組中只有第一項。關於捕獲組的概念以後再說

<script type="text/javascript">
 var pa = /girl/gi;
 var testStr = "myGirl, yourgirl, hisgIrl";
 var girls = pa.exec(testStr); //捕获
 alert(girls.length + ":" + (girls instanceof Array)); //正则表达式没有捕获组,所以数组长度为1
 alert(girls[0]); //第一次捕获的是 Girl
  //因为我们是用的全局匹配,所以此次匹配的时候从上次匹后的位置开始继续匹配
 alert(pa.exec(testStr)[0]);  // girl
 alert(pa.exec(testStr)); // gIrl
 alert(pa.exec(testStr)); //继续向后没有匹配的字符串,所以返回null
  // 返回null,如果继续再匹配,则会回到字符串的开始,重写开始匹配。
 alert(pa.exec(testStr)); // Girl
  // ...开启新一轮匹配
</script>



所以我們如果想找到全部匹配的字串可以時候用循環,結束條件就是匹配結果為null

<script type="text/javascript">
 var pa = /girl/gi;
 var testStr = "myGirl, yourgirl, hisgIrl";
 var girls;
 while(girls = pa.exec(testStr)){ //如果等于null,会自动转成 false,结束。
  alert(girls);
 }
</script>



分組。在正規表示式中用()括起來任務是一組。群組可以嵌套。

<script type="text/javascript">
  //()内的内容就是第1组(Girl),其实我们完整真个表达式可以看出第0组 girl(Girl)
  // 将来对应着匹配结果数组的下标。 
 var pa = /girl(Girl)/gi; 
 var test = "girlGirl abdfjla Girlgirl fal girl";
 var girls;
 while(girls = pa.exec(test)){
  //匹配之后,数组的第0个元素对应的这第0组的匹配结果,第1个元素对应着第1组的匹配结果
  for (var i = 0; i < girls.length; i++) {
   console.log(girls[i]);
  }
  console.log("-------------");
 }
</script>
//最终运行结果:
girlGirl
Girl
-------------
Girlgirl
girl
------------



五、正则表达式规则==(124)==

表达式规则

正则表达式元字符是包含特殊含义的字符。它们有一些特殊功能,可以控制匹配模式的

方式。反斜杠后的元字符将失去其特殊含义。

字符类:单个字符和数字

[0-9A-Za-z]  

元字符/元符号                    匹配情况

.                         匹配除换行符外的任意字符

[a-z0-9]                     匹配括号中的字符集中的任意字符

[^a-z0-9]                     匹配任意不在括号中的字符集中的字符

\d ==[0-9]                    匹配数字

\D ==[^0-9]                        匹配非数字,同[^0-9]相同

\w     [0-9A-Za-z_]                    匹配字母和数字及_

\W                         匹配非(字母和数字及_)

字符类:空白字符

元字符/元符号                    匹配情况

\0                             匹配null 字符

\b                             匹配空格字符

\n                             匹配换行符

\r                             匹配回车字符

\t                             匹配制表符

\s                             匹配空白字符、空格、制表符和换行符

\S                             匹配非空白字符

字符类:锚字符

元字符/元符号                    匹配情况

^                             行首匹配

$                             行尾匹配

字符类:重复字符

元字符/元符号                                匹配情况

?  例如(x?)                            匹配0个或1 个x

*  例如(x*)                            匹配0个或任意多个x

+  例如(x+)                            匹配至少一个x

(xyz)+                                     匹配至少一个(xyz)

{m,n} 例如x{m,n}  n>=次数>=m            匹配最少m个、最多n个x

{n}                                        匹配前一项n次    

{n,}          匹配前一项n次,或者多次

六、常用正则表示==(128)==

1、检查邮政编码

var pattern = /[1-9][0-9]{5}/; //共6位数字,第一位不能为0
var str = &#39;224000&#39;;
alert(pattern.test(str));



2、检查文件压缩包

var pattern = /[\w]+\.zip|rar|gz/; //\w 表示所有数字和字母加下划线
var str = &#39;123.zip&#39;; //\.表示匹配.,后面是一个选择
alert(pattern.test(str));



3、删除多余空格

var pattern = /\s/g; //g 必须全局,才能全部匹配
var reg=new RegExp(&#39;\\s+&#39;,&#39;g&#39;);
var str = &#39;111 222 333&#39;;
var result = str.replace(pattern,&#39;&#39;); //把空格匹配成无空格
alert(result);



4、删除空格

var pattern = /^\s+/; 
var str = &#39; goo gle &#39;;
alert(str+" "+str.length);
var result = str.replace(pattern, &#39;&#39;);
alert(result+" "+result.length);
pattern = /\s+$/; 
result = result.replace(pattern, &#39;&#39;);
alert(result+" "+result.length);
pattern = /\s+/g; 
result = result.replace(pattern, &#39;&#39;);
alert(result+" "+result.length);
5、简单的电子邮件验证
var pattern = /^([a-zA-Z0-9_\.\-]+)@([a-zA-Z0-9_\.\-]+)\.([a-zA-Z]{2,4})$/;
var str = &#39;yc60.com@gmail.com&#39;;
alert(pattern.test(str));
var pattern = /^([\w\.\-]+)@([\w\.\-]+)\.([\w]{2,4})$/;
var str = &#39;yc60.com@gmail.com&#39;;
alert(pattern.test(str));



七、支持正则表达式的字符串方法



方法 描述
search 检索与正则表达式相匹配的第一个匹配项的索引。
match 找到一个或多个正则表达式的匹配。
replace 替换与正则表达式匹配的子串。
split 把字符串分割为字符串数组。
<script type="text/javascript">
 var s = "Abc123aBc";
 alert(s.search(/abc/gi)); 
 alert(s.search(/abc/gi)); // 即使设置的全局模式,每次search也是从开始向后查找
 //match方法和正则表达式的exec()方法的作用是一样的,但是match会一次性把所有的匹配放在一个数组中,全部返回
 alert(s.match(/abc/gi)); // Abc,aBc
 alert(s.replace(/[ab]/gi, "x"));   //把a或b替换成x
 var ss = s.split(/[0-9]+/gi); //用1个或多个数字切割。 Abc,aBc
 alert(ss);
</script>



以上所述是小编给大家介绍的JS基础系列之正则表达式,更多相关内容请关注PHP中文网(www.php.cn)! 


陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
JavaScript引擎:比較實施JavaScript引擎:比較實施Apr 13, 2025 am 12:05 AM

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

超越瀏覽器:現實世界中的JavaScript超越瀏覽器:現實世界中的JavaScriptApr 12, 2025 am 12:06 AM

JavaScript在現實世界中的應用包括服務器端編程、移動應用開發和物聯網控制:1.通過Node.js實現服務器端編程,適用於高並發請求處理。 2.通過ReactNative進行移動應用開發,支持跨平台部署。 3.通過Johnny-Five庫用於物聯網設備控制,適用於硬件交互。

使用Next.js(後端集成)構建多租戶SaaS應用程序使用Next.js(後端集成)構建多租戶SaaS應用程序Apr 11, 2025 am 08:23 AM

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務

如何使用Next.js(前端集成)構建多租戶SaaS應用程序如何使用Next.js(前端集成)構建多租戶SaaS應用程序Apr 11, 2025 am 08:22 AM

本文展示了與許可證確保的後端的前端集成,並使用Next.js構建功能性Edtech SaaS應用程序。 前端獲取用戶權限以控制UI的可見性並確保API要求遵守角色庫

JavaScript:探索網絡語言的多功能性JavaScript:探索網絡語言的多功能性Apr 11, 2025 am 12:01 AM

JavaScript是現代Web開發的核心語言,因其多樣性和靈活性而廣泛應用。 1)前端開發:通過DOM操作和現代框架(如React、Vue.js、Angular)構建動態網頁和單頁面應用。 2)服務器端開發:Node.js利用非阻塞I/O模型處理高並發和實時應用。 3)移動和桌面應用開發:通過ReactNative和Electron實現跨平台開發,提高開發效率。

JavaScript的演變:當前的趨勢和未來前景JavaScript的演變:當前的趨勢和未來前景Apr 10, 2025 am 09:33 AM

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

神秘的JavaScript:它的作用以及為什麼重要神秘的JavaScript:它的作用以及為什麼重要Apr 09, 2025 am 12:07 AM

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。

Python還是JavaScript更好?Python還是JavaScript更好?Apr 06, 2025 am 12:14 AM

Python更适合数据科学和机器学习,JavaScript更适合前端和全栈开发。1.Python以简洁语法和丰富库生态著称,适用于数据分析和Web开发。2.JavaScript是前端开发核心,Node.js支持服务器端编程,适用于全栈开发。

See all articles

熱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.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

記事本++7.3.1

記事本++7.3.1

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

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用