1. 程式人生 > >javascript基礎知識之正則表達式(regular expression)

javascript基礎知識之正則表達式(regular expression)

進行 str 空白 regex 多行匹配 並且 parse int 回車


一種字符串匹配的模式,用來檢查一個串是否含有某種子串、
將匹配的子串替換或者從某個串中取出符合某個條件的子串等。
註意:在javascript中正則表達式也是一種對象
1:創建正則表達式
兩種方式:隱式創建(文字量方法)和顯示創建(使用構造函數)
eg:
文字量方法:var regExp = /pattern/flags;
將文字量的正則表達式賦值給一個變量,包含在兩個斜杠之間的一個或多個字符,在後一個斜杠的後面,可以指定一個或多個選項。
var regExp1 = /abc/;
var regExp2 = /abc/gi;
使用構造函數:var regExp =new RegExp("pattern","flags");


構造函數RegExp()中有2個參數:
第一個參數指定正則表達式,這是正則表達式的字符串表示方法.
第二個參數是可選參數,它指定正則表達式的選項.(同上flags)
var regExp1 = new RegExp("abc");
var regExp2 = new RegExp("abc","gi");
(一)相關的語法
由普通字符和特殊字符(元字符)組成。
普通字符包括:數字,大小寫字母,下劃線等
特殊字符:() [] {} ^ $ * ? \ | + .
普通字符可以直接拿來用,特殊字符是一定要轉義。
1:量詞
? 出現零次或一次
* 出現零次或多次(任意次)
+ 出現一次或多次(至少一次)
{n} 對應n次

{n,m} 至少出現n次但不超過m次(中間不能有空格)
{n,} 至少出現n次
eg:
/ab*/表示一個字符串有一個a後面跟著零個或若幹個b。(a, ab, abbb……)
/ab+/表示一個字符串有一個a後面跟著一個b或者更多b。 (ab, abbb……)
/ab?/表示一個字符串有一個a後面跟著零個或者一個b。 (a, ab)
/a?b+$/表示在字符串的末尾有零個或一個a跟著一個或幾個b。(b, ab, abbb……)
/ab{2}/表示一個字符串有一個a跟著2個b(abb)。
/ab{2,}/表示一個字符串有一個a跟著至少2個b。(abb, abbb……)
/ab{3,5}/表示一個字符串有一個a跟著3到5個b。(abbbbb, abbb)

2:修飾符
i:表示忽略大小寫,就是在字符串匹配的時候不區分大小寫
g:表示全局匹配,即匹配字符串中出現的所有模式
m:表示進行多行匹配
3:中文或者
[\u4e00-\u9fa5]表示中文集
| 表示或
eg:
/hi|hello/表示一個字符串裏有hi或者hello
/(b|cd)ef/表示bef或cdef
/(a|b)*c/表示有0個或多個a加上c或者有0個或多個b加上c;
4:預定義類
. [^\n\r] 除了換行和回車之外的任意字符
\d [0-9] 數字字符
\D [^0-9] 非數字字符
\s 空白字符
\S 非空白字符
\w [a-zA-Z_0-9] 單詞字符(所有的字母)
\W [^a-zA-Z_0-9] 非單詞字符
eg:
/a.[0-9]/表示一個字符串有一個a後面跟著一個除了換行和回車之外的任意字符和一個數字;
/^.{3}$/表示有任意三個字符的字符串(長度為3)
5:字符串的首尾
字符串的起始位置我們用^
eg:
/^abc/ 判斷字符串是否是以abc開始的
/^The/表示所有以The開始的字符串There,The frfr等
字符串的結束位置我們用$
eg:
/xyz$/ 判斷字符串是否是以xyz結尾的
6:字符集
(1)簡單類
它是有一一對應的字符組成的集合,通過[]包裹住,來表示這幾個字母組成的一個集合
eg:
[abc123]表示由abc123六個字符組成的一個集合
eg:
/[ab]/表示一個字符串有一個a或b
(2)範圍類
通過首位字母末尾字母以及-組成的一個範圍集合
[a-z] 表示小寫字母集合。
eg:
/[a-d]/表示一個字符串包含小寫的a到d中的一個
[A-Z] 表示大寫字母集合。
eg:
/[A-D]/表示一個字符串包含小寫的A到D中的一個
eg:
/^[a-zA-Z]/表示一個以字母開頭的字符串
[0-9] 表示數字集合。
eg:
/[0-9]/表示一個字符串包含小寫的0到9中的一個
(3)負向類
通過在[]內部最前面添加^來表示不包含該集合的字符集
eg:
[^abc] 表示不包含abc的任意字符集合
(4)組合類
通過[]將幾個集合拼接在一起表示一個組合的集合。
eg:
[a-zA-Z0-9] 表示大小寫字母以及數字的結合
7:預定義特殊字符
\t 制表符
\n 回車符
\f 換頁符
\b 與回退字符
(二)相關的方法
字符串相關方法: search, match, split
返回數字類型:search
返回數組的方法:match,split
返回字符串的方法:replace
1:split
把一個字符串分割成字符串數組。
stringObject.split(separator,howmany)
separator字符串或正則表達式(必選)
howmany該參數可指定返回的數組的最大長度(可選)
(1)正則表達式
註意‘‘和‘ ‘;
‘ ‘表示的空格數量,一個還是兩個切割
var str="Hello world"
var strarr=str.split(" ");
console.log(strarr);
//["Hello", "world"]
var str="Hello,world"
var strarr=str.split(",");
console.log(strarr);
//["Hello", "world"]
var strarr="hello".split("");
console.log(strarr);
//["h", "e", "l", "l", "o"]
var str="Hello,world"
var strarr=str.split(",",1);
console.log(strarr);
//["Hello"]
(2)正則切割
var str = ‘a b c‘;
console.log(str.split(‘‘))
console.log(str.split(/\s+/))
//["a", " ", " ", " ", "b", " ", "c"]
//["a", "b", "c"]
2:search
獲取字符在字符串中的位置
stringObject.search(regexp)
regexp字符串或者正則對象
未找到任何匹配的子串,則返回 -1。
search() 方法不執行全局匹配,忽略標誌 g,總是從字符串的開始進行檢索,
var str="Hello world!"
var newstr=str.search("world");
console.log(newstr);
//6
var str="Hello world!"
var newstr=str.search(/world/);
console.log(newstr);
//6
var str="abcabc!"
var newstr=str.search(/a/);
console.log(newstr);
//0
var str="abcabc!"
var newstr=str.search(/a/g);
console.log(newstr);
//0
3:match
字符串內檢索指定的值,或找到一個或多個(regexp 是否具有標誌 g,若不具有則執行一次匹配就結束)正則表達式的匹配。
返回包含指定的值數組,沒有找到則返回一個null
stringObject.match(searchvalue)
stringObject.match(regexp)
eg:
var str = ‘abbcccbbbbbddbbbdabbbsbbccdb‘;
console.log(str.match(/b+/g))
console.log(str.match(‘bb‘))
//["bb", "bbbbb", "bbb", "bbb", "bb", "b"]
//["bb", index: 1, input: "abbcccbbbbbddbbbdabbbsbbccdb"]
var str="Hello world!"
console.log(str.match("world"))
console.log(str.match("World"))
// ["world", index: 6, input: "Hello world!"]
//null
4:replace
在字符串中用一些字符替換另一些字符,或替換一個與正則表達式匹配的子串。
stringObject.replace(regexp/substr,replacement)
regexp/substr:要替換的模式的 RegExp 對象或子字符串(必須)
regexp具有全局標誌 g,將全局匹配。否則,它只替換第一個匹配子串
replacement替換文本或生成替換文本的函數(要有返回值,並且將這個返回值作為字符串)。(必須)
返回值是一個新字符串
(1)replacement表示替換文本
eg:
"abcd".replace("a","0");
//"0bcd"
"abcda".replace("a","0");
//"0bcda"
eg:
var str="Hello world world!"
var newstr=str.replace(/world/, "W")
var newstr1=str.replace(/world/g, "W")
console.log(str);
console.log(newstr);
console.log(newstr1);
//Hello world!
//Hello W!
//Hello W W!
(2)replacement表示函數,函數自帶參數
replacement 中的 $ 字符具有特定的含義
$1、$2、...、$99與 regexp 中的第 1 到第 99 個子表達式相匹配的文本。
每個匹配都調用該函數,return的值就是要替換的值。
第一個參數是匹配上的字符串。
第二個參數匹配上的字符串的下標
最後一個參數是 源字符串。
var str = "你好嗎,你真的好嗎,你一定要好好噠";
str = str.replace(/你/g,function(a,b,d){
console.log(arguments);
return "他/她";
});
console.log(str);
//["你", 0, "你好嗎,你真的好嗎,你一定要好好噠"]
//["你", 4, "你好嗎,你真的好嗎,你一定要好好噠"]
//["你", 10, "你好嗎,你真的好嗎,你一定要好好噠"]
//他/她好嗎,他/她真的好嗎,他/她一定要好好噠
var str = "每天200元,吃飯40元";
newstr = str.replace(/\d+元/g,function(a){
console.log(a);
return "$" + Math.round((parseInt(a) / 6) * 100) / 100;
});
console.log(str);
console.log(newstr);
//200元
//40元
//每天200元,吃飯40元
//每天$33.33,吃飯$6.67
(3)replacement分組
var str = "hello world";
newstr = str.replace(/(\w+)\s(\w+)/,"$2 $1");
console.log(newstr);
//world hello
var str = "hello world";
newstr = str.replace(/(\w+)\s(\w+)/,function(match,$1,$2,index,str){
console.log(match); //第一個匹配到的字符串
console.log($1); //第一個匹配的
console.log($2); //第二個匹配的 /////繼續向後
console.log(index); //匹配到的字符串出現的位置
console.log(str); //最後一個源串
});
console.log(newstr);
//hello world
//hello
//world
//0
//hello world
var jsondata= {
xingming : "哈哈",
xingbie : "女"
}
var str = "大家好,我叫!xingming!,我是個!xingbie!生"
str = str.replace(/!(\w+)!/g,function(match,$1){
return jsondata[$1];
});
console.log(str);
//大家好,我叫哈哈,我是個女生
正則相關方法: exec和test
exec返回一個數組
test返回的是布爾值
1:exec
與String對象的match()方法類似
返回一個數組,其中存放匹配的結果。如果未找到匹配,則返回值為 null。
RegExpObject.exec(string)
var strreg = /abc/g;
var new1=strreg.exec(‘abcd‘);
console.log(new1);
//["abc", index: 0, input: "abcd"]
var strreg = /abc/g;
var new2=strreg.exec(‘abc‘);
console.log(new2);
//["abc", index: 0, input: "abc"]
var strreg = /abc/g;
var new3=strreg.exec(‘ab‘);
console.log(new3);
//null
2:test
檢測一個字符串是否匹配某個模式.
RegExpObject.test(string)
字符串 string 中含有與 RegExpObject 匹配的文本,則返回 true,否則返回 false。
var mystring ="hello world World!";
var regexp = /wo/i;
console.log(regexp.test(mystring))
//true

javascript基礎知識之正則表達式(regular expression)