美文网首页
正则表达式

正则表达式

作者: 只是为了一个梦想 | 来源:发表于2018-06-25 17:22 被阅读0次

字符串是编程时涉及到的最多的一种数据结构,对字符串进行操作的需求几乎无处不在,正则表达式是一种用来匹配字符串的强有力的武器。

基础概念

^ 开头匹配
$ 结尾匹配
/d 匹配数字
/w 可以匹配一个字母或者数字
\s 匹配一个空格(包括tab等空白符)
. 可以匹配任意字符

  • 任意字符
  • 至少一个字符
    ? 代表 0或1个字符
    {n} n个字符
    {n,m} n~m个字符

特殊字符在正则表达式中需要转义、' \ ',示例:' - '转义为 '-'.
包括:$、( )、*、+、.、[、?、\、^、{、|

image.png

现在匹配一个固定电话、如:010-123456
\d{3}\-\d{3,8}
匹配一个手机号码
^1[3|4|5|7|8|9][0-9]\d{8}$

匹配中文: [\u4e00-\u9fa5]

英文字母:[a-zA-Z]

数字:[0-9]

我们平时使用较多的、
去掉字符串的空格," s m l " --> "sml"
非正则实现:

function trim(str) {
    let strArr = []
    for (let i = 0; i < str.length; i++) {
        if (str[i] !== ' ') {
            strArr.push(str[i])
        }
    }
    return strArr.join("")
}

用正则实现:

function trim(str) {
    return str.replace(/(\s)/g, "")
}

我要解决的问题、
1、姓名:2-10位中文
^[\u4E00-\u9FA5]{2,10}$
2、手机号:支持7、8、11、12位数字
^\d{7}$|^\d{8}$|^\d{11}$|^\d{12}$
3、详细地址:0-60位汉字
^[\u4E00-\u9FA50-9]{2,60}$
4、货物名称:1-20位中文
^[\u4E00-\u9FA5]{1,20}$
5、总件数:1-5594
/(^[1-4]\d{3}$)|(^5[0-4]\d{2}$)|(^55[0-8]\d{1}$)|(^559[0-4]$)/
6、重量、体积:0-999.99
^([0-9]{1,3})+(.[0-9]{2})?$
7、金额:1-99999999(整数)
^[1-9]\d{0,7}$
8、备注:0-30字
^[\u4E00-\u9FA50-9]{0,30}$

.*? 是正则固定搭配用法,表示[非贪婪匹配]模式,尽可能匹配少的

看完这些、其实,我们日常所用的也几乎止步于此,应该算入门了、

image.png

任何技能都在于实践!

看看正则其他玩法、
数字格式化问题,1234567890 --> 1,234,567,890

非正则实现:
function formatCash(str) {
 let formattedStr = ""
 for (let i = 0; i < str.length; i++) {
      if ((i + 1) % 4 === 1 && i !== 0) {
                formattedStr += " "
            }
            formattedStr += str[i]
  }
  return formattedStr
}

正则实现:
function formatCash(str) {
  let strRes = str.replace(/(\d{4})(?=[^$])/g, "$1 ")
  return strRes
}

?=exp 零宽度正预测先行断言 以下正则表达式匹配以ed结尾的单词的前面部分:\b\w+(?=ed\b)。 ?<=exp 又称为零宽度正回顾后发断言 以下正则表达式匹配以an开头的单词的后面部分,即匹配单词除了字符串an之外的部分:(?<=\ban)\w+\b

再来一个面试中经常被问的、字符串数组去重。

es6写法:
let strArr=["a","b","c","a","b","c"]
function unique(arr){
  return [...new Set(arr)]
}

es5写法:
function unique(arr) {
    return arr.filter(function(ele, index, array) {
        return array.indexOf(ele) === index
    })
}

正则表达式实现:
function unique(arr) {
    return arr.sort().join(",,").
    replace(/(,|^)([^,]+)(,,\2)+(,|$)/g, "$1$2$4").
    replace(/,,+/g, ",").
    replace(/,$/, "").
    split(",")
}

这里有了一个多次出现的词,replace(),我们了解下replace,来自W3C.
replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。

stringObject.replace(regexp/substr,replacement)

最近的一个需求、确定微信浏览器是否大于等于5.0

function wxVersion(str){
    const ua = window.navigator.userAgent.match(/micromessenger\/[\d.]+/gi)
    return (ua+"").replace(/[^0-9.]/ig,"")
}
image.png

相关文章

  • Linux命令行与Shell脚本编程大全-shell正则表达式

    本章内容: 定义正则表达式 了解基本正则表达式 扩展正则表达式 创建正则表达式 定义正则表达式 正则表达式是你定义...

  • 正则相关

    正则表达式基本语法 正则表达式常见字符 正则表达式特殊字符 正则表达式数量词 正则表达式边界匹配 正则表达式逻辑或...

  • 正则表达式系列-1

    正则表达式系列-1正则表达式系列-2正则表达式系列-3正则表达式系列-4 什么是正则表达式 正则表达式就是用事先定...

  • 正则表达式

    正则表达式 - 教程正则表达式 - 简介正则表达式 - 语法正则表达式 - 元字符正则表达式 - 运算符优先级正则...

  • Python基础入门 - 正则表达式与综合实战

    1. 初识正则表达式 1.1 介绍 步骤介绍正则表达式入门及应用正则表达式的进阶正则表达式案例 1.2 正则表达式...

  • Java正则表达式参考

    Java正则表达式入门 java正则表达式应用 深入浅出之正则表达式(一) 深入浅出之正则表达式(二) 正则表达式...

  • 正则表达式

    正则表达式 正则表达式就是记录文本规则的代码 正则表达式常用的元字符 正则表达式常用的限定符 正则表达式举例:这里...

  • Python爬虫(十)_正则表达式

    本篇将介绍python正则表达式,更多内容请参考:【python正则表达式】 什么是正则表达式 正则表达式,又称规...

  • python正则表达式

    本篇将介绍python正则表达式,更多内容请参考:【python正则表达式】 什么是正则表达式 正则表达式,又称规...

  • 正则表达式

    了解正则表达式基本语法 能够使用JavaScript的正则对象 正则表达式简介 什么是正则表达式 正则表达式:用于...

网友评论

      本文标题:正则表达式

      本文链接:https://www.haomeiwen.com/subject/akhtsftx.html