js——正则整理
1、示例
匹配網(wǎng)址url
function IsURL(str_url){var strRegex = "^((https|http|ftp|rtsp|mms)?://)"+ "?(([0-9a-z_!~*'().&=+$%-]+: )?[0-9a-z_!~*'().&=+$%-]+@)?" //ftp的user@ + "(([0-9]{1,3}\.){3}[0-9]{1,3}" // IP形式的URL- 199.194.52.184 + "|" // 允許IP和DOMAIN(域名)+ "([0-9a-z_!~*'()-]+\.)*" // 域名- www. + "([0-9a-z][0-9a-z-]{0,61})?[0-9a-z]\." // 二級(jí)域名 + "[a-z]{2,6})" // first level domain- .com or .museum + "(:[0-9]{1,4})?" // 端口- :80 + "((/?)|" // a slash isn't required if there is no file name + "(/[0-9a-z_!~*'().;?:@&=+$,%#-]+)+/?)$"; var re=new RegExp(strRegex); if (re.test(str_url)){return (true); }else{ return (false); } } var testUrl; testUrl="harveyzeng.iteye.com/blog/1776991"; alert(IsURL(testUrl)); View Code匹配手機(jī)號(hào)碼
var mobile = /^(13[0-9]{9})|(18[0-9]{9})|(14[0-9]{9})|(17[0-9]{9})|(15[0-9]{9})$/; // 或 var mobile = /^1[34578]\d{9}$/; View Code匹配固話(huà)
var tel = /^([0-9]{3,4}-)?[0-9]{7,8}$/; View Code匹配身份證號(hào)碼
var reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/; View Code匹配密碼
// 以字母開(kāi)頭,長(zhǎng)度在6-18之間,只能包含字符、數(shù)字和下劃線(xiàn) var password = /^[a-zA-Z]\w{5,17}$/; View Code匹配一年的12個(gè)月
var month = /^(0?[1-9]|1[0-2])$/; View Code匹配一個(gè)月的31天
var day = /^((0?[1-9])|((1|2)[0-9])|30|31)$/; View Code匹配Email地址
var email = /^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/; View Code匹配漢字
var n = /^[\u4e00-\u9fa5],{0,}$/; View Code匹配html標(biāo)簽
var html = /<(.*)>(.*)<\/(.*)>|<(.*)\/>/; View Code用正則表達(dá)式限制只能輸入中文
οnkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5]/g,''))" View Code用正則表達(dá)式限制只能輸入數(shù)字和英文
οnkeyup="value=value.replace(/[\W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))" View Code2、 可選項(xiàng)修飾符,可以組合使用
- g : 全文查找
- i :忽略大小寫(xiě)
- m : 多行查找
3、正則表達(dá)式模式
| [abc] | 匹配 abc 其中的一個(gè) |
| [^abc] | 匹配 除abc 之外的字符 |
| (x|y) | 匹配 x 或者 y |
?
4、正則表達(dá)式中的預(yù)定義類(lèi)
| . | IE下[^\n],其他[^\n\r] | 匹配除了換行和行結(jié)束符之外的單個(gè)字符 |
| \d | [0-9] | 匹配數(shù)字 |
| \D | [^0-9] | 匹配非數(shù)字字符 |
| \b | /\bc/.exec('acbc');匹配右側(cè)邊界的c | 匹配單詞邊界 |
| \B | /\Bc/.exec('bcbc') ;成功地匹配到bcbc中的c | 匹配非單詞邊界 |
| \s | [\n\r\t\f\x0B] | 匹配一個(gè)空白字符 |
| \S | [^\n\r\t\f\x0B] | 匹配一個(gè)非空白字符 |
| \w | [a-zA-Z0-9_] | 匹配字母數(shù)字和下劃線(xiàn) |
| \W | [^a-zA-Z0-9_] | 匹配除字母數(shù)字下劃線(xiàn)之外的字符 |
| \0 | ? | 查找NULL字符 |
| \n | ? | 查找換行符 |
| \xxx | ? | 查找以八進(jìn)制數(shù) xxx 規(guī)定的字符 |
| \xdd | ? | 查找以十六進(jìn)制數(shù) dd 規(guī)定的字符 |
| \uxxxx | ? | 查找以十六進(jìn)制數(shù) xxxx 規(guī)定的 Unicode 字符 |
5、量詞(下表量詞到{n,m}之前,單個(gè)出現(xiàn)時(shí)皆是貪婪量詞)
| * | 匹配零次或多次 | zo* 能匹配 “z” 以及 “zoo” 。等價(jià)于 {0,} |
| + | 匹配一次或多次 | 'zo+' 能匹配 “zo” 以及 “zoo” ,但不能匹配 “z” 。等價(jià)于 {1,} |
| ? | 匹配零次或一次 | "do(es)?" 可以匹配 "do" 或 "does" 中的 "do" 。? 等價(jià)于 {0,1} |
| {n} | n 是一個(gè)非負(fù)整數(shù)。匹配確定的 n 次 | 'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的兩個(gè) o |
| {n,} | n 是一個(gè)非負(fù)整數(shù),至少匹配 n 次 | 'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。 'o{1,}' 等價(jià)于 'o+' 。 'o{0,}' 則等價(jià)于 'o*' |
| {n,m} | m 和 n 均為非負(fù)整數(shù),其中n<=m。最少匹配n次且最多匹配m次 | "o{1,3}" 將匹配 "fooooood" 中的前三個(gè) o。 'o{0,1}' 等價(jià)于 'o?' 。請(qǐng)注意在逗號(hào)和兩個(gè)數(shù)之間不能有空格 |
| n$ | 匹配以n結(jié)尾的字符串 | ? |
| ^n | 匹配以n開(kāi)頭的字符串 | ? |
| ?=n | 匹配任何其后緊接指定字符串n的字符串 | (?=pattern)所謂正向預(yù)查,意思就是:要匹配的字符串,后面必須緊跟著pattern。我們知道正則表達(dá)式/cainiao/會(huì)匹配cainiao。同樣,也會(huì)匹配cainiao9中的cainiao。但是我們可能希望,cainiao只能匹配cainiao8中的cainiao。這時(shí)候就可以像下面這樣寫(xiě):/cainiao(?=8)/ |
| ?!n | 匹配任何其后沒(méi)有緊接指定字符串n的字符串 | ? |
6、 貪婪量詞與惰性量詞
- 用貪婪量詞進(jìn)行匹配時(shí),它首先會(huì)將整個(gè)字符串當(dāng)成一個(gè)匹配,如果匹配的話(huà)就退出。如果不匹配,就把最后一個(gè)字符去掉再進(jìn)行匹配,不匹配繼續(xù)去掉最后一個(gè)字符,直到找到一個(gè)匹配或者不剩任何字符為止
- 用惰性量詞進(jìn)行匹配時(shí),先看第一個(gè)字符串是否匹配,如果不匹配就加入第二個(gè)字符串以此類(lèi)推,直到找到一個(gè)匹配或者不剩任何字符為止
7、分組與非捕獲性分組
re = /abc{2}/;//將匹配abcc re = /(abc){2}/;//將匹配abcabc //上面的分組都是捕獲性分組 str = "abcabc ###"; arr = re.exec(str); alert(arr[1]);//abc //非捕獲性分組 (?:) re = /(?:abc){2}/; arr = re.exec(str); alert(arr[1]);//undefined View Code8、反向引用
當(dāng)包含分組的正則表達(dá)式進(jìn)行過(guò)test,match,search這些方法之后,每個(gè)分組都被放在一個(gè)特殊的地方以備將來(lái)使用,這些存儲(chǔ)是分組中的特殊值,我們稱(chēng)之為反向引用
var re = /(A?(B?(C?)))/; /*上面的正則表達(dá)式將依次產(chǎn)生三個(gè)分組 (A?(B?(C?))) 最外面的 (B?(C?)) (C?)*/ str = "ABC"; re.test(str);//反向引用被存儲(chǔ)在RegExp對(duì)象的靜態(tài)屬性1-9中 alert(RegExp.$1+"\n"+RegExp.$2+"\n"+RegExp.$3); //反向引用也可以在正則表達(dá)式中使用\1 ,\2...這類(lèi)的形式使用 re = /\d+(\D)\d+\1\d+/; str = "2008-1-1"; alert(re.test(str));//true str = "2008-4_3"; alert(re.test(str));//false // 使用反向引用可以要求字符串中某幾個(gè)位置上的字符必須相同.另外,在replace這類(lèi)方法中可用特殊字符序列來(lái)表示反向引用 re = /(\d)\s(\d)/; str = "1234 5678"; alert(str.replace(re,"21"));//在這個(gè)里面1表示第一個(gè)分組1234,2則表示5678 View Code9、正向前瞻
正向前瞻,用來(lái)捕獲出現(xiàn)在特定字符之前的字符,只有當(dāng)字符后面跟著某個(gè)特定字符才去捕獲它。與正向前瞻對(duì)應(yīng)的有負(fù)向前瞻,它用匹配只有當(dāng)字符后面不跟著某個(gè)特定字符時(shí)才去匹配它。在執(zhí)行前瞻和負(fù)向前瞻之類(lèi)的運(yùn)算時(shí),正則表達(dá)式引擎會(huì)留意字符串后面的部分,然而卻不移動(dòng)index
//正向前瞻 re = /([a-z]+(?=\d))/i; //我們要匹配后面跟一個(gè)數(shù)字的單詞,然后將單詞返回,而不要返回?cái)?shù)字 str = "abc every1 abc"; alert(re.test(str));//true alert(RegExp.$1);//every alert(re.lastIndex);//使用前瞻的好處是,前瞻的內(nèi)容(?=\d)并不會(huì)當(dāng)成一次匹配,下次匹配仍從它開(kāi)始 //負(fù)向前瞻(?!) re = /([a-z](?!\d))/;i //將匹配后面不包含數(shù)字的字母,并且不會(huì)返回(?!\d)中的內(nèi)容 str = "abc1 one"; alert(re.test(str)); alert(RegExp.$1);//one View Code10、正則表達(dá)式對(duì)象的方法
match: 使用正則表達(dá)式模式對(duì)字符串執(zhí)行查找,并將包含查找的結(jié)果作為數(shù)組返回
stringObj.match(rgExp) // 如果match的表達(dá)式匹配了全局標(biāo)記g將出現(xiàn)所有匹配項(xiàng),而不用循環(huán),但所有匹配中不會(huì)包含子匹配項(xiàng) View Codeexec: 用正則表達(dá)式模式在字符串中運(yùn)行查找,并返回包含該查找結(jié)果的第一個(gè)值(數(shù)組),如果匹配失敗,返回null
test: 返回一個(gè)Boolean值,它指出在被查找的字符串中是否匹配給出的正則表達(dá)式。
search: 返回與正則表達(dá)式查找內(nèi)容匹配的第一個(gè)子字符串的位置(偏移位),如果沒(méi)有返回-1
replace: 返回根據(jù)正則表達(dá)式進(jìn)行文字替換后的字符串的復(fù)制
split: 將一個(gè)字符串分割為子字符串,然后將結(jié)果作為字符串?dāng)?shù)組返回
compile: 用于在腳本執(zhí)行過(guò)程中編譯正則表達(dá)式;也可用于改變和重新編譯正則表達(dá)式
11、 正則表達(dá)式對(duì)象的屬性
source: 返回正則表達(dá)式模式的文本的復(fù)本,只讀
var re = /[a-z]/i; alert(re.source);//將[a-z]字符串輸出 //請(qǐng)注意,直接alert(re)會(huì)將正則表達(dá)式連同前向斜線(xiàn)與標(biāo)志輸出,這是re.toString方法定義的 View Codelastindex: 返回字符位置,它是被查找字符串中下一次成功匹配的開(kāi)始位置,默認(rèn)值是-1
var re = /[A-Z]/; //exec方法執(zhí)行后,修改了re的lastIndex屬性, var str = "Hello,World!!!"; var arr = re.exec(str); alert(re.lastIndex);//0,因?yàn)闆](méi)有設(shè)置全局標(biāo)志 re = /[A-Z]/g; arr = re.exec(str); alert(re.lastIndex);//1 arr = re.exec(str); alert(re.lastIndex);//7 View Code1-9: 返回九個(gè)在模式匹配期間找到的、最近保存的部分。只讀。
input($_):返回執(zhí)行規(guī)范表述查找的字符串。只讀
lastMatch($&): 返回任何正則表達(dá)式搜索過(guò)程的最后匹配的字符。只讀
//lastMatch 最后匹配的字符 re = /[a-z]/g; str = "hi"; re.test(str); alert(RegExp.lastMatch);//h re.test(str); alert(RegExp["$&"]);//i ,$&是lastMatch的短名字,但它不是合法變量名 View CodelastParen($+): 如果有的話(huà),返回任何正則表達(dá)式查找過(guò)程中最后包括的子匹配。只讀
//lastParen 最后匹配的分組 re = /[a-z](\d+)/gi; str = "Class1 Class2 Class3"; re.test(str); alert(RegExp.lastParen);//1 re.test(str); alert(RegExp["$+"]);//2 View CodeleftContext($`): 返回被查找的字符串中從字符串開(kāi)始位置到最后匹配之前的位置之間的字符。只讀
rightContext($''): 返回被搜索的字符串中從最后一個(gè)匹配位置開(kāi)始到字符串結(jié)尾之間的字符。只讀
multiline($*): 屬性返回正則表達(dá)式是否使用多行模式。這個(gè)屬性不針對(duì)某個(gè)正則表達(dá)式實(shí)例,而是針對(duì)所有正則表達(dá)式
//因?yàn)镮E,Opera不支持這個(gè)屬性,所以最好還是單獨(dú)指定 var re = /\w+/m; alert(re.multiline); alert(RegExp["$*"]);//RegExp對(duì)象的靜態(tài)屬性不會(huì)因?yàn)榻oRegExp某個(gè)對(duì)象實(shí)例指定了m標(biāo)志而改變 RegExp.multiline = true;//這將打開(kāi)所有正則表達(dá)式實(shí)例的多行匹配模式 alert(RegExp.multiline); View Code使用元字符注意事項(xiàng): 元字符是正則表達(dá)式的一部分,當(dāng)要匹配正則表達(dá)式本身時(shí),必須對(duì)這些元字符轉(zhuǎn)義
所有元字符: () [] {} \ ^ $ | ? * + .
參考:
http://www.cnblogs.com/zfc2201/archive/2012/12/18/2824107.html
http://www.jb51.net/article/28007.htm
http://www.cnblogs.com/aaronjs/archive/2012/06/30/2570970.html
?
轉(zhuǎn)載于:https://www.cnblogs.com/ywang/p/7815681.html
總結(jié)
- 上一篇: git编译安装与常见问题解决
- 下一篇: Oracle 常用命令举例