元字符
. 匹配除了換行符以外的任意字符
\w 匹配
字母或數字或下划線或漢字等 [a-z0-9A-Z_] (只考慮英文的話效果一樣)
\d 表示數字的意思,相反,\D表示非數字
限定符:
* 重復零次或多次
+ 重復一次或多次
? 重復一次或多次
{n} 重復n次
{n,} 重復n次或更多次
{n,m} 重復n到m次
空白:
\f匹配換頁符,\n匹配換行符,\r匹配回車,\t匹配制表符,\v匹配垂直制表符。
\s匹配單個空格,等同於[\f\n\r\t\v]
字符集合
[abc] 表示a或者b或者c中的任意一個字符
^[a-zA-Z0-9] 匹配已數字字母開頭的字符串
一般 來說,當“^”出現在 “[]”內時就被視做否定運算符;而當“^”位於“[]”之外,或沒有“[]”時,則應當被視做定位符
非貪婪 ?
a.*?b匹配
最短的,以a開始,以b結束的字符串
正則表達式的修飾符
全局匹配,修飾符g /..../g
不區分大小寫,修飾符i /...../i
行首行尾,修飾符m /....../m
demo:
var $name = "time"; var reg = new RegExp("\\b"+$name+"\\b\|\\bkitty\\b","g"); //new RegExp 的方法可以用$name變量值,但對\b這樣的邊界符要轉義 \\b var str = "time is one datimey time kitty" alert(str.replace(reg,""))
去除特殊字符串
function clearString(s){ var pattern = new RegExp("[`~!@#$^&*()=|{}':;',\\[\\].<>/?~!@#¥……&*()&;|{}【】‘;:”“'。,、?]") var rs = ""; for (var i = 0; i < s.length; i++) { rs = rs+s.substr(i, 1).replace(pattern, ''); } return rs; } var h="#sdfsd///////fsdf/" var t=clearString(h) console.log(t)
function clearString(s){ var pattern = /[\s.<>/?~!@#¥……&*()&;|{}【】‘;:”“'。,、?.<>\/\[\]?~!@#¥……&*()&;|{}【】‘;:”“'。,、?]/g var rs= s.replace(pattern,"") return rs; } var h="dfghdfg df gh dfghdf [] \ / > gh" var t=clearString(h) $("html body").append(t) console.log(t)
正則模版匹配
var pp = { init:"替換的字符串", reg:/{.+?}/g, /*+?非貪婪模式*/ pri:function () { var k = this.init.match(this.reg).map(function (a) { return a.slice(1, -1); }); console.log(k) }, remove_tag:function (str) { str=str.replace(/<\/?[^>]*>/g, "") console.log(str);//去掉所有的html標記 }, remove_s:function (str) { str=str.replace(/(^\s+)|(\s+$)/g, "") console.log(str)/*去除前后空格*/ }, remove_1:function (str) { str = str.replace(/\s/g, "") console.log(str)/*去除所有空格*/ }, get_tag_html:function(str){ reg=/<ul>[\s\S]*?<\/ul>/gi console.log(str.match(reg)) }/*獲得指定標簽的內容*/, remove_tag1:function(str){ str=str.replace(/<ul[\s\S]*?>|<\/ul>/g, "") console.log(str) }/*去除指定標簽*/, pri3:function (arr) { var str = this.init var len = str.match(this.reg).length console.log(str.match(this.reg)) for (var i = 0; i < len; i++) { var t = this.reg.exec(str) console.log(t) var tmp = t.toString().slice(1, -1); if (arr[tmp]) { str = str.replace(t.toString(), arr[tmp]) } } console.log(str) }/*替換{}中的字符串*/ } pp.init = "開始{$age}中sdfasdf{$name}間從{然后后來}前" pp.pri3({"$name":"_name_", "$age":"_age_"}) pp.remove_tag("<div>asdfasdfasdf<span>a12<33>4456</span></div>") pp.get_tag_html("<ul>asdfasdfasdf</ul><ul>21</ul>") pp.remove_tag1("<ul class='sd'>232323<ul>asdf</ul></ul><ul>ddd</ul>")
輸出
開始_age_中sdfasdf_name_間從{然后后來}前
replace function
var str = "他今年22歲,她今年20歲,他的爸爸今年45歲,她的爸爸今年44歲,一共有4人" function test($1) { var gyear = (new Date()).getYear() - parseInt($1) + 1; return $1 + "(" + gyear + "年出生)"; } var reg = new RegExp("(\\d+)歲", "g"); var reg2=/(\d+)歲/g /*所以有時*/ var newstr = str.replace(reg, test); alert(str); alert(newstr);