日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

正則表達式RegExp語法與用法詳解_正則表達式

作者:朝陽39 ? 更新時間: 2022-11-21 編程語言

正則表達式的定義和用途

正則表達式用于定義一些字符串的規則。計算機可以根據正則表達式,來檢查一個字符串是否符合指定的規則,或者將字符串中符合規則的內容提取出來。

RegExp的意思是 Regular expression。使用typeof檢查正則對象,會返回object。

創建正則表達式

方式一:使用構造函數創建

使用構造函數創建時,更加靈活,因為參數中還可以傳遞變量。

	var 變量 = new RegExp("正則表達式"); // 注意,參數是字符串
	var 變量 = new RegExp("正則表達式", "匹配模式"); // 注意,兩個參數都是字符串

匹配模式作為第二個參數。這個參數可以是:

  • i 忽略大小寫。這里的 i 指的是 ignore。
  • g 全局匹配模式。這里的 g 指的是 global。
var reg = new RegExp("a"); // 定義一個正則表達式:檢查一個字符串中是否含有 a
 
var reg = new RegExp('A', 'i');
var str = 'qiangu';
 
console.log(reg.test(str)); // 打印結果:true

方式二:使用字面量創建

	var 變量 = /正則表達式/;  // 注意,這個語法里沒有引號
 
	var 變量 = /正則表達式/匹配模式;  // 注意,這個語法里沒有引號
	var reg = /A/i; // 定義正則表達式的規則:檢查一個字符串中是否含有 a。忽略大小寫。
	var str = "qiangu";
 
	console.log(typeof reg);  // 打印結果:object
	console.log(reg.test(str)); // 打印結果:true

正則表達式的語法

匹配字符

字符 描述
. 匹配任意單個字符除了換行符
[ ] [ ] 內為字符集,匹配 [ ] 內任一字符
[^ ] 匹配除了方括號里的任意字符
* 匹配 >= 0 個 * 號前的字符。
+ 匹配 >= 1 個+號前的字符。
? 匹配 0 或 1 個 ?號前的字符。
{n,m} 匹配n到m個大括號之前的字符或字符集
(xyz) 匹配與 xyz 完全相等的字符串
| 或運算符,匹配|符號前或后的字符
\s 匹配空格
\ 轉義字符,匹配一些保留的字符?[ ] ( ) { } . * + ? ^ $ \ |
^ 從開始行開始匹配
$ 從末端開始匹配
  • /[ab]/ 等價于 /a|b/:檢查一個字符串中是否包含 a或b
  • /[a-z]/:檢查一個字符串那種是否包含任意小寫字母
  • /[A-Z]/:任意大寫字母
  • /[A-z]/:任意字母
  • /[0-9]/:任意數字
  • /a[bde]c/:檢查一個字符串中是否包含 abc 或 adc 或 aec
  • [Tt]he 匹配 the 和 The
  • [^c]ar 匹配一個后面跟著ar的除了c的任意字符,如匹配par,不匹配car
  • [a-z]* 匹配一個行中所有以小寫字母開頭的字符串。
"[a-z]*" => The car parked in the garage

c.+t 匹配以首字母c開頭以t結尾,中間跟著至少一個字符的字符串

"c.+t" => The fat cat sat on the mat
  • [T]?he 匹配字符串 he 和 The
  • [0-9]{2,3} 匹配最少 2 位最多 3 位 0~9 的數字
  • 可以省略第二個參數。 例如,[0-9]{2,} 匹配至少兩位 0~9 的數字。
  • 逗號也省略掉則表示重復固定的次數。 例如,[0-9]{3} 匹配3位數字
  • (c|g|p)ar 匹配 car 或 gar 或 par
  • "(f|c|m)at\.?" => The fat cat sat on the mat.
  • "(T|t)he" => The car is parked in the garage.
  • "^(T|t)he" => The car is parked in the garage.

簡寫

簡寫 描述
\w 匹配所有字母數字,等同于?[a-zA-Z0-9_]
\W 匹配所有非字母數字,即符號,等同于:?[^\w]
\d 匹配數字:?[0-9]
\D 匹配非數字:?[^\d]
\s 匹配所有空格字符,等同于:?[\t\n\f\r\p{Z}]
\S 匹配所有非空格字符:?[^\s]
\f 匹配一個換頁符
\n 匹配一個換行符
\r 匹配一個回車符
\t 匹配一個制表符
\v 匹配一個垂直制表符
\p 匹配 CR/LF(等同于?\r\n),用來匹配 DOS 行終止符

模式修正符

標志 描述
i 忽略大小寫。
g 全局搜索。
m 多行修飾符:錨點元字符?^?$?工作范圍在每行的起始。
  • "/The/gi" => The fat cat sat on the mat.
  • "/.(at)/g" => The fat cat sat on the mat.
  • (^,$) 用于檢查格式是否是在待檢測字符串的開頭或結尾。但我們如果想要它在每行的開頭和結尾生效,我們需要用到多行修飾符 m。

貪婪匹配

正則表達式默認采用貪婪匹配模式,在該模式下意味著會匹配盡可能長的子串。

"/(.*at)/" => The fat cat sat on the mat.

惰性匹配

使用 ? 將貪婪匹配模式轉化為惰性匹配模式。

"/(.*?at)/" => The fat cat sat on the mat.

斷言

符號 描述
?= 正先行斷言-存在
?! 負先行斷言-排除
?<= 正后發斷言-存在
?<! 負后發斷言-排除
  • 定義一個正先行斷言要使用 ()。在括號內部使用一個問號和等號: (?=...)。正先行斷言的內容寫在括號中的等號后面。 例如,表達式 (T|t)he(?=\sfat) 匹配 The 和 the,在括號中我們又定義了正先行斷言 (?=\sfat) ,即 The 和 the 后面緊跟著 (空格)fat。
"(T|t)he(?=\sfat)" => The fat cat sat on the mat.
  • 負先行斷言 ?! 用于篩選出其后不跟隨斷言中定義的格式。表達式 (T|t)he(?!\sfat) 匹配 The 和 the,且其后不跟著 (空格)fat。
"(T|t)he(?!\sfat)" => The fat cat sat on the mat.
  • 正后發斷言 記作(?<=...) 用于篩選所有匹配結果,篩選條件為 其前跟隨著斷言中定義的格式。 例如,表達式 (?<=(T|t)he\s)(fat|mat) 匹配 fat 和 mat,且其前跟著 The 或 the。
"(?<=(T|t)he\s)(fat|mat)" => The fat cat sat on the mat.
  • 負后發斷言 記作 (?<!...) 用于篩選所有匹配結果,篩選條件為 其前不跟隨著斷言中定義的格式。 例如,表達式 (?<!(T|t)he\s)(cat) 匹配 cat,且其前不跟著 The 或 the。
"(?<!(T|t)he\s)(cat)" => The cat sat on cat.

正則表達式的使用

判斷字符串是否符合規則 test()

符合則返回true,否則返回false。

  var reg = /[^ab]/; // 規則:字符串中,除了a、b之外,還有沒有其他的字符內容?
  var str = "acb";
 
  console.log(reg.test(str)); // 打印結果:true
	var reg = /[^0-9]/;  // 規則:字符串中,除了數字之外,還有沒有其他的內容?
	var str1 = "1991";
	var str2 = "199a1";
 
	console.log(reg.test(str1)); // 打印結果:false (如果字符串是 純數字,則返回 false)
	console.log(reg.test(str2)); // 打印結果:true

搜索第一個符合條件的字符串 search()

search()【只會查找第一個】——搜索字符串中是否含有指定內容。如果搜索到指定內容,則會返回第一次出現的索引;否則返回-1。

	var str = "hello abc hello aec afc";
	// 搜索字符串中是否含有abc 或 aec 或 afc
	result = str.search(/a[bef]c/);
	console.log(result); // 打印結果:6

搜索所有符合條件的字符串 match()

從一個字符串中將符合條件的內容提取出來,封裝到一個數組中返回(即使只查詢到一個結果)。

默認情況下,match()方法只會找到第一個符合要求的內容,設置正則表達式為全局匹配模式,這樣就會匹配到所有的內容,并以數組的形式返回。

可以為一個正則表達式設置多個匹配模式,且匹配模式的順序無所謂。

	var str = "1a2a3a4a5e6f7A8B9C";
 
	var result1 = str.match(/[a-z]/);   // 找到符合要求的第一個內容,然后返回
	var result2 = str.match(/[a-z]/g);  // 設置為“全局匹配”模式,匹配字符串中 所有的小寫字母
	var result3 = str.match(/[a-z]/gi); // 設置多個匹配模式,匹配字符串中 所有的字母(忽略大小寫)
 
	console.log(result1); // 打印結果:["a"]
	console.log(result2); // 打印結果:["a", "a", "a", "a", "e", "f"]
	console.log(result3); // 打印結果:["a", "a", "a", "a", "e", "f", "A", "B", "C"]

字符串拆分成數組 split()

	var str = "1a2b3c4d5e6f7g";
	var result = str.split(/[A-z]/); // 參數是一個正則表達式:表示所有字母
	console.log(result); //  ["1", "2", "3", "4", "5", "6", "7", ""]

?字符串替換 replace()

默認只會替換第一個,如果需要替換全部符合條件的內容,可以設置正則表達式為全局匹配模式。

let str1 = '2020/5/20'
console.log(str1.replace(/\//g,"-"));  //得到 2020-5-20
   
var str2 = "Today is fine day,today is fine day !!!"
console.log(str2.replace("today","tomorrow"));  //只能替換第一個today
console.log(str2.replace(/today/gi,"tomorrow")); //這里用到了正則,且為“全局匹配”模式,才能替換所有的today

過濾HTML標簽?

str.replace(/<.*?>/g, "") 

去除空格

	str = str.replace(/^\s*/, ""); //去除開頭的空格
 
	str = str.replace(/\s*$/, ""); //去除結尾的空格

常用正則表達式

常用正則表達式大全

最全的常用正則表達式大全——包括校驗數字、字符、一些特殊的需求等等

非零數字(只能輸入數字,但值不能為0,可以是00,01等)

/^([0]{2}|0[1-9]|[1-9])\d*$/

驗證保留兩位小數的正整數或0

/^([1-9]\d*|0)(\.\d{1,2})?$/

驗證手機號碼,如13908653654

/^(1[3|5|7|8][0-9]{9})$/

驗證固定號碼,如010-86551122或01086551122

/^((0\d{2,3})[-]?)(\d{7,8})([-]?(\d{3,}))?$/

?驗證電話號碼—手機號碼或固定號碼,如13908653654或010-86551122或01086551122

/(^(1[3|5|7|8][0-9]{9})$)|(^((0\d{2,3})[-]?)(\d{7,8})([-]?(\d{3,}))?$)/

驗證一代身份證號碼

/^\d{8}(0\d|10|11|12)([0-2]\d|30|31)\d{3}$/

驗證二代身份證號碼

/^\d{6}(18|19|20)\d{2}(0\d|10|11|12)([0-2]\d|30|31)\d{3}[\dXx]$/

驗證通用身份證號碼

/(^\d{8}(0\d|10|11|12)([0-2]\d|30|31)\d{3}$)|(^\d{6}(18|19|20)\d{2}(0\d|10|11|12)([0-2]\d|30|31)\d{3}(\d|X|x)$)/

總結

原文鏈接:https://blog.csdn.net/weixin_41192489/article/details/113618913

欄目分類
最近更新