js谜之正则表达式

媒介

良久之前就说要写一篇正则表达式的文章,正则表达式老是记了又忘,忘了再记,记了再忘,卒。
言归正传,本日终究要研究一下这个谜一样的正则表达式了。实在正则表达式并不难(真的吗?orz)
本文转自本人博客:http://lsxj615.com/2016/08/15…

为何要用正则表达式

在进修之前,我们须要弄邃晓,终究什么时刻须要用到正则表达式,正则表达式的用处终究是什么?
比如说,你正在搜刮一个文件,这个文件内里包括单词car(不辨别大小写),然则呢你又不想把包括字符串car的其他单词(比方carry)也一同找出来,那末这个时刻你就能够运用正则表达式来帮你处置惩罚题目。固然,这只是浩瀚场景中的一种。正则表达式功能强大,能够帮你处置惩罚种种婚配文本题目。又或许表单考证的体式格局,也能够运用正则表达式来处置惩罚。

正则表达式是什么

简朴来讲,正则表达式就是字符串,是用来婚配和处置惩罚文本的字符串。用正则表达式言语建立的。

正则表达式的语法

婚配字符

  • .(英文句号):婚配任何一个单个字符

  • []:婚配鸠合内多个字符中的某个字符
    e.g. [ns]a –> 婚配 na 或sa

  • [-]:婚配该区间内的字符
    e.g. [a-z] , [0-9]

  • ^ 取非婚配:除了该字符集内的字符,都能够婚配。只有当^涌现在[]之间,且紧跟在[背面,才发挥取非的作用。
    e.g. [^0-9] 婚配非数字的字符

运用元字符

元字符:在正则表达式中有特别寄义的字符。若须要示意该字符自身,需运用\转义。

  • \d 任何一个数字字符,相当于[0-9]

  • \D 任何一个非数字字符,相当于1

  • \w 任何一个字母数字字符或下划线字符,相当于[a-zA-Z0-9_]

  • \W 任何一个非字母数字字符或非下划线字符,相当于2

  • \s 任何一个空缺字符,等价于[fnrtv]

  • \S 任何一个非空缺字符,等价于3

总而言之,小写字母与大写字母都是相反的,所以记着小写字母的寄义,大写字母则是对应的取非寄义。

反复婚配

  • ? 0个或1个字符
    e.g. [0-9]? 涌现0次或一次,且最多只能涌现1次数字。

  • + 一个或多个字符
    e.g. [0-9]+ 示意一个或多个一连的数字

  • * 0个或多个字符
    e.g. [0-9]* 一连涌现0劣货屡次的数字

  • {n} 设置一个准确的反复的值
    e.g. [0-9]{3} 三个数字

  • {min,max} 设置反复次数的最小值和最大值
    e.g. [0-9]{2,4} 起码2个数字,最多4个数字

  • {min, } 设置反复次数的最小值
    e.g. [0-9]{2,} 起码2个数字

懒散型婚配

为了防备涌现反复婚配形成的过分婚配,由于*+都是“贪欲型”元字符,它们在举行婚配时会尽可能从一段文本的开首一向婚配到这段文本的末端,而不是遇到第一个婚配就完毕。

那末这个时刻就须要运用”懒散型”。仅需在贪欲型元字符后加上?即可。如:*?,+?,{n,}?

位置婚配

  • \b 单词边境

  • \B 非单词边境。查找前后都有过剩空格的连字符。

  • ^ 字符串开首。涌现在字符鸠合的表面且位于一个情势的开首,^婚配字符串的开首

  • $ 字符串末端

Javascript中的正则表达式

ECMAScript经由过程RegExp范例来支撑正则表达式。

var expression = / pattern / flags;

个中pattern能够是任何简朴或庞杂的正则表达式。
flags用来标明正则表达式的行动。以下所示:

  • g : 全局情势。情势运用于一切的字符串,不是在发明第一个婚配项后就马上住手的。

  • i : 不辨别大小写。正则表达式默许是区分大小写的。i则是疏忽大小写

  • m : 示意多行情势,也就是说抵达一行文本末端的时刻还会继承查找下一行中是不是存在与情势婚配的项。

建立正则表达式的体式格局

  • 字面量情势来定义
    var pattern = /sxj/i;

  • 运用RegExp组织函数
    var pattern = new RegExp("sxj", "i");

那末这两种体式格局的区分除了情势不一样,另有一个差异在于:
ECMAScript 3中,正则表达式字面量始终会同享统一个RegExp实例;而运用组织函数建立的每个实例都是一个实例。

不过!【敲黑板!】ECMAScript 5明确规定了,运用正则表达式字面量必需想直接挪用RegExp组织函数一样,每次都建立新的RegExp实例。而各大浏览器也对此举行了修正。

RegExp实例

实例属性

  • global: 布尔值,示意是不是设置了g标志

  • ignoreCase: 布尔值,示意是不是设置了i标志

  • multiline: 布尔值,示意是不是设置了m标志

  • lastIndex:整数,示意最先搜刮下一个婚配项的字符位置,从0最先。

  • source: 正则表达式的字符串示意。根据字面量情势返回。

实例要领

exec()
pattern.exec(text);

查找text中的婚配项。

//例子
var pattern = /sxj/i;
var text = "sxj is a good student sxj haha";
console.log(pattern.exec(text));
//["sxj", index: 0, input: "sxj is a good student sxj haha"]
var pattern2 = /shi/i;
console.log(pattern2,exec(text));//null

从上述例子能够发明,若找到,则返回一个数组,该数组包括第一个婚配项,除此之外,另有两个属性:index(婚配项在字符串中的位置),input(运用正则表达式的字符串)。若没有婚配项返回null

关于exec而言,不管是不是设置g全局标志,每次也只会返回一个婚配项。然则如果在统一个字符串上屡次挪用,设置了g标志则会继承查找新的婚配项,而没有设置的话只会返回第一个婚配项信息。除此之外,pattern的lastIndex属性在全局情势会增添,非全局情势始终不变。

test()
pattern.test(text);

检察目的字符串与该情势是不是婚配。婚配返回true,不然返回false。

String中的正则表达式

match()
text.match(pattern);

match婚配一个字符串和一个正则表达式。若没有g标识,则结果与pattern.exec(text)雷同。如有g标志,则返回一个包括一切婚配的数组。

search()
text.search(pattern);

若找到婚配,返回第一个婚配的首字符位置。若没有找到返回-1。
此要领会疏忽g标识,且没有position参数。

replace()
string.replace(searchValue, replaceValue);

searchValue能够是一个字符串或一个正则表达式对象。如果一个字符串,只会在第一次涌现的处所被替代。如果一个正则表达式,如有g标志则替代一切婚配的地方,若没有则只替代第一个婚配的地方。

总结

正则表达式是个异常好用的东西,若控制了可到达事半功倍的结果。好好学哟~

  1. 0-9
  2. a-zA-Z0-9_
  3. fnrtv
    原文作者:lsxj
    原文地址: https://segmentfault.com/a/1190000006504899
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞