日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

js——正则整理

發(fā)布時(shí)間:2024/7/19 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 js——正则整理 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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 Code

2、 可選項(xiàng)修飾符,可以組合使用

  • g : 全文查找
  • i :忽略大小寫(xiě)
  • m : 多行查找

3、正則表達(dá)式模式

表達(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è)匹配或者不剩任何字符為止
// 惰性量詞僅僅在貪婪量詞后面加個(gè)"?"而已,如"a+"是貪婪匹配的,"a+?"則是惰性的 var str = "abc"; var re = /\w+/; // 將匹配abc re = /\w+?/; // 將匹配a View Code

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 Code

8、反向引用

當(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 Code

9、正向前瞻

正向前瞻,用來(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 Code

10、正則表達(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 Code

exec: 用正則表達(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ù)制

// 語(yǔ)法: stringObj.replace(rgExp, replaceText) // 示例 function f2c(s) {var test = /([\d]{4})-([\d]{1,2})-([\d]{1,2})/;return(s.replace(test, function($0,$1,$2,$3) {return($2 +"/" + $1);})); } document.write(f2c("today: 2011-03-29")); // 輸出:today: 03/2011 View Code

split: 將一個(gè)字符串分割為子字符串,然后將結(jié)果作為字符串?dāng)?shù)組返回
compile: 用于在腳本執(zhí)行過(guò)程中編譯正則表達(dá)式;也可用于改變和重新編譯正則表達(dá)式

// 語(yǔ)法 stringObj.compile(rgExp,可選項(xiàng)修飾符(見(jiàn)2)) // 示例 var str="Every man in the world! Every woman on earth!";patt=/man/g; str2=str.replace(patt,"person"); document.write(str2+"<br />");patt=/(wo)?man/g; patt.compile(patt); str2=str.replace(patt,"person"); document.write(str2);/* 輸出: Every person in the world! Every woperson on earth! Every person in the world! Every person on earth! */ View Code

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 Code

lastindex: 返回字符位置,它是被查找字符串中下一次成功匹配的開(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 Code

1-9: 返回九個(gè)在模式匹配期間找到的、最近保存的部分。只讀。
input($_):返回執(zhí)行規(guī)范表述查找的字符串。只讀

//input 最后用于匹配的字符串(傳遞給test,exec方法的字符串) var re = /[A-Z]/; var str = "Hello,World!!!"; var arr = re.exec(str); alert(RegExp.input);//Hello,World!!! re.exec("tempstr"); alert(RegExp.input);//仍然是Hello,World!!!,因?yàn)閠empstr不匹配 View Code

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 Code

lastParen($+): 如果有的話(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 Code

leftContext($`): 返回被查找的字符串中從字符串開(kāi)始位置到最后匹配之前的位置之間的字符。只讀
rightContext($''): 返回被搜索的字符串中從最后一個(gè)匹配位置開(kāi)始到字符串結(jié)尾之間的字符。只讀

//leftContext 返回被查找的字符串中從字符串開(kāi)始位置到最后匹配之前的位置之間的字符 //rigthContext 返回被搜索的字符串中從最后一個(gè)匹配位置開(kāi)始到字符串結(jié)尾之間的字符 re = /[A-Z]/g; str = "123ABC456"; re.test(str); alert(RegExp.leftContext);//123 alert(RegExp.rightContext);//BC456 re.test(str); alert(RegExp["$`"]);//123A alert(RegExp["$'"]);//C456 View Code

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)義
所有元字符: () [] {} \ ^ $ | ? * + .

var str = "?"; var re = /?/; alert(re.test(str)); 出錯(cuò),因?yàn)?/span>?是元字符,必須轉(zhuǎn)義 re = /\?/; alert(re.test(str)); // true View Code

參考:
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é)

以上是生活随笔為你收集整理的js——正则整理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。