Skip to content

正则表达式积累 #23

Open
Open
@raclen

Description

@raclen

将数字和. 之外的清除

onkeyup='this.value=this.value.replace(/[^\d.]/gi,"")'

()的用法

var str2=str.match(/qq:\'\d+\'/);
得到的是一个数组[qq:'2275025']
var str2=str.match(/qq:\'(\d+)\'/);
得到的数组["qq:'2275025'","2275025"]
str2[2]=2275025
()的作用就是在当前匹配的结果中把()的东西,作为数组第二个元素,让你可以获取

\w的用法

我们平常看到了网站用户名注册,就用到了这个
\w=[A-Za-z0-9_] 在正则表达式中,大写和小写,
相反,比如\D表示非数字,\d表示数字,\W=[^A-Za-z0-9_],说到这,我们可以知道[^是取反的意思(^是匹配开始)
正则表达式中,元字符需要转义,例如(),转义,用\这个我们都知道

[] 中括号的用法

在中括号中,我们可以这样写[123 )]
这个表示是1或者2或者3或者空格或者),在中括号中,元字符好像不需要转义

|的用法

|表示或者的意思,通常我们需要匹配的可能有几个就可以|,比如身份证号,最后一位可能是数字,也可能是X,这里我们就可以用到|

*?+

*——0到多个
?——0到1个
+——1到多个

身份证正则

/^(\d{6}[1,2]\d{3}[0,1]\d{7}|\d{6}[1,2]\d{3}[0,1]\d{6}(\d|X|x))$/

数字逗号分隔

    var strNum='67788889999';
    var strNumn=strNum.split('').reverse().join('').replace(/(\d{4})/g,'$1 ').replace(/\,$/,'').split('').reverse().join('');
    console.log(strNumn);
    //这个还可以这样写
    function thousand(str){
          return str.replace(/(?!^)(?=([0-9]{3})+$)/g,',');
    }
console.log(thousand(str));//"1,234,567,890"
console.log(thousand("123456"));//"123,456"
console.log(thousand("1234567879876543210"));//"1,234,567,879,876,543,210"
//这个正则也可以
var f2 = '99999999999'.replace(/\d{1,3}(?=(\d{3})+$)/g, '$&,');
//对于有小数的
var f = '99999999999.02'.replace(/\d{1,3}(?=(\d{3})+(?:\.\d{1,2})?$)/g, '$&,');
//toLocaleString竟然就可以达到这个效果	
var str = "1234567890";
(+str).toLocaleString();//"1,234,567,890"
"420684199206554016".replace(/(\d{3})(?!$)/g,'$&,')
"420,684,199,206,554,016"

这说一下replace里面约定$用法
image

$(1-99) 是捕获的文本 $&是匹配的文本

//限制输入8个字符,相当于maxLeng=8

var t=/^[A-Za-z0-9|\u4e00-\u9fa5]{8}/;
document.getElementById('key').onkeyup = function(){
    var self =this.value;
    this.value = t.test(self)?self.match(t):self;
    }

在使用过程中,我们可能会匹配多个,match 在这里就不好用了
我们可以使用exec,这里是例子是匹配字符串中所有的src链接,因为javascript不支持反向零宽断言,好像只能用捕获的方式来写,注意在下面result和p要先定义出来,写在while里面会死循环

var str = '';
var result;
var p = /src="(.*?)"/g;
while (result = p.exec(str)){
        console.log(result[1])
}

扩展阅读

正则表达式前端使用手册
javascript正则表达式---正向预查

#2014-07-18

Metadata

Metadata

Assignees

No one assigned

    Labels

    博客搬迁以前博客的文章迁移过来

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions