做项目的时候,正则表达式其实用得很少,而且大部分用得到的正则表达式都可以通过搜索引擎找到。因此这么多年来虽然已经多次研读正则表达式的文档,但偶尔要自己写的时候还是会脑子卡壳,求助谷歌…
好吧,再好好的理解一下,做个笔记,争取减少求助搜索引擎的次数。本文并非系统整理正则表达式的概念,而是加强巩固自己淡忘的一些概念和知识点。
正则表达式通过构造函数使用方法
var str = "He is a boy. She is not a boy." var reg = new RegExp("\\bis\\b"); str.replace(reg, "IS"); //"He IS a boy. She is not a boy." var reg = new RegExp("\\bis\\b" , 'g'); str.replace(reg, "IS"); //"He IS a boy. She IS not a boy." //另一种写法:正则表达式前后用/包含,g参数加在最后 str.replace(/\bis\b/g, "IS"); |
* 加了“g” 参数表示整个字符串都执行,不加则只替换一次
* 文档:http://www.w3school.com.cn/jsref/jsref_obj_regexp.asp
* “\b”是单词边界
var str = "a9b8c7d6"; str.replace(/[^abc]/g,"*"); //"a*b*c***" str = "abcabcabc"; str.replace(/^a/g,"*"); //"*bcabcabc" |
* “^”为反向选择符,本例中表示非abc这三个字母
* “^”放在表达式头部表示字符头,因此只替换了头部的a
var str = "abcdefg-123456"; str.replace(/[a-z-]/g,"*"); //"********123456" |
* “-“在范围类”[]”中添加在最后则可以单独表示字符”-”
str="a1\na2\na3"; str.replace(/^a/g,"*"); //"*1 //a2 //a3" str.replace(/^a/gm,"*"); //"*1 //*2 //*3" |
* 参数“m”为处理多行参数。str中含有多个\n换行符,第一个表达式认为只处理总的字符开头,加了m参数则表示每一行都作为一个新的开头
str="12315678"; str.replace(/\d{3,6}/g, "*"); //"*78" str.replace(/\d{3,6}?/g, "*") //"**78" |
* 上面为贪婪模式,匹配了6个字符,匹配了一次;下面为非贪婪模式,匹配最少的3个字符,匹配了两次
str="2017-08-20"; str.replace(/(\d{4})-(\d{2})-(\d{2})/g, "$3-$2-$1") //"20-08-2017" str.replace(/(?:\d{4})-(\d{2})-(\d{2})/g, "$1") //"08" |
* 分组+引用
* 分组内以“?:”开头,则分组不会被引用到
str="a1b2*3-4"; str.replace( /\w(?=\d)/g , "X"); //"X1X2*3-4" str.replace( /\w(?!\d)/g , "X"); //"aXbX*X-X" |
* (?=\d)判断后面紧跟着的是一个数字,但括号内本身不参与替换;(?!\d)判断后面紧跟着的不是一个数字,括号内本身不参与替换
一些支持正则表达式作为参数的字符串方法:
var str = "abc123def456"; //替换 str.replace(/\d/g,"*"); //查找并返回第一个匹配的索引,会忽略g标志 str.search(/\d/g); //3 //查找并返回所有匹配的字符串,组成数组,注意有没有g标志的区别 str.match(/\d/g); //["1", "2", "3", "4", "5", "6"] str.match(/\d/); //["1"] //分割字符串成数组 str.split(/\d+/g); //["abc", "def", ""] |
* match方法如果没有g标志,返回的单个值还有index属性,可以找到索引位置,参考http://www.w3school.com.cn/jsref/jsref_match.asp
在replace方法中用批处理函数:
var str = "a1b2c3d4e5"; str.replace(/\d/g , function(match , index){ console.log(index); return parseInt(match)+1 }); //"a2b3c4d5e6" |
* 第一个参数为匹配的值,第二个参数为索引值
* 如果正则中含有分组,则可以做更多变化,参考http://www.w3school.com.cn/jsref/jsref_replace.asp
本站所有文章均为原创,欢迎转载,请注明文章出处:https://blog.brain1981.com/1705.html。百度和各类采集站皆不可信,搜索请谨慎鉴别。技术类文章一般都有时效性,本人习惯不定期对自己的博文进行修正和更新,因此请访问出处以查看本文的最新版本。
您也可以扫描左边的二维码,关注我们的微信公众号,在微信上查看我们的案例。