Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

正则表达式积累 #23

Open
raclen opened this issue Sep 15, 2019 · 0 comments
Open

正则表达式积累 #23

raclen opened this issue Sep 15, 2019 · 0 comments
Labels
博客搬迁 以前博客的文章迁移过来

Comments

@raclen
Copy link
Owner

raclen commented Sep 15, 2019

将数字和. 之外的清除

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

@raclen raclen added the 博客搬迁 以前博客的文章迁移过来 label Sep 15, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
博客搬迁 以前博客的文章迁移过来
Projects
None yet
Development

No branches or pull requests

1 participant