1 正則表達式中特殊字符的含義
^ 匹配一個輸入或一行的開頭,/^a/匹配"an A",而不匹配"An a"
$ 匹配一個輸入或一行的結尾,/a$/匹配"An a",而不匹配"an A"
* 匹配前面元字符0次或多次,/ba*/將匹配b,ba,baa,baaa
+ 匹配前面元字符1次或多次,/ba*/將匹配ba,baa,baaa
? 匹配前面元字符0次或1次,/ba*/將匹配b,ba
(x) 匹配x保存x在名為$1...$9的變量中
x|y 匹配x或y
{n} 精確匹配n次
{n,} 匹配n次以上
{n,m} 匹配n-m次
[xyz] 字符集(character set),匹配這個集合中的任一一個字符(或元字符)
[^xyz] 不匹配這個集合中的任何一個字符
[\b] 匹配一個退格符
\b 匹配一個單詞的邊界
\B 匹配一個單詞的非邊界
\cX 這兒,X是一個控制符,/\cM/匹配Ctrl-M
\d 匹配一個字數字符,/\d/ = /[0-9]/
\D 匹配一個非字數字符,/\D/ = /[^0-9]/
\n 匹配一個換行符
\r 匹配一個回車符
\s 匹配一個空白字符,包括\n,\r,\f,\t,\v等
\S 匹配一個非空白字符,等於/[^\n\f\r\t\v]/
\t 匹配一個制表符
\v 匹配一個重直制表符
\w 匹配一個可以組成單詞的字符(alphanumeric,這是我的意譯,含數字),包括下划線,如[\w]匹配"$5.98"中的5,等於[a-zA-Z0-9]
\W 匹配一個不可以組成單詞的字符,如[\W]匹配"$5.98"中的$,等於[^a-zA-Z0-9]。
特殊字符大全完整引用見:https://www.jb51.net/article/43190.htm
2 正則表達式的使用
var expression = /pattern/flags; var expression = new RegExp("pattern",["flags"])
pattern:可以是任何簡單或復雜的正則表達式。
flag:標志,每個正則表達式都可帶有一或多個標志,用來標明正則表達式的行為。
· 正則表達式的匹配模式支持下列三個標志:
g: 表示全局(global)模式,即模式將被應用於所有字符串,而非在發現第一個匹配項時立即停止;
i: 表示不區分大小寫(case-insensitive)模式,即在確定該匹配項時忽略模式與字符串的大小寫;
m: 表示多行(multiline)模式,即在到達一行文本末尾時還會繼續查找下一行中是否存在於模式匹配的項。
//匹配第一個"bc"或"cat",不區分大小寫 var pattern1 = /[bc]at/i; //與pattern1相同,只不過是使用構造函數創建的 var pattern2 = new RegExp("[bc]at", "i");
3 去除字符串中所有空格和標點符號,並拓展判斷回文串
實現這個功能,可以從反方向思考,不是直接去除所有標點符號,而是匹配非數字和大小寫字符的其他字符,然后用“”替換。
在本篇總結中,只簡單描述用replace()結合正則表達式的方法:
replace():
stringObject.replace(regexp/substr,replacement)
參數 | 描述 |
regexp/substr | 必需。規定子字符串或要替換的模式的 RegExp 對象。 請注意,如果該值是一個字符串,則將它作為要檢索的直接量文本模式,而不是首先被轉換為 RegExp 對象。 |
replacement | 必需。一個字符串值。規定了替換文本或生成替換文本的函數。 |
可以得到下面去除str中的空格和非數字字母的字符后,判斷是否為回文串的函數:
function palindrome(str) { // 先后去除空格和非數字字母的字符 var newStr = str.replace(/\s/g,"").replace(/[^a-zA-Z0-9]/g,"").toLowerCase(); //判斷翻轉后的字符串是否與原字符串相等 var reverStr = newStr.split("").reverse().join(""); if(reverStr === newStr){ return true; } else{ return false; } } palindrome(":_ e y_ e");
最后划一下重點:
/\s/g: 匹配所有空白字符
/[^a-zA-Z0-9]/g: 匹配所有非數字非字母的字符
:)