js 正则

元字符

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

  

 

 

 

posted @ 2012-10-09 13:24  break_happy  Views(4092)  Comments(0Edit  收藏  举报