元字符
. 匹配除了换行符以外的任意字符
\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);