Javascript中的正则表达式使用方法

在Javascript里,有两种使用正则的方法,

一是创建一个正则表达式的实例;

另外一个是使用String对象里的正则表达相关的方法.
正则表达式对象
两种创建方法;就是一个直接创建,一个用new去创建了;

首先看下new的用法

var regex = new RegExp("\\d{5}")

不过一般我们都是直接用,下面这种字面量的方法去创建的

var my_regex=/[a-z]+/g;

正则表达式的方法

  • exec(string),对string进行正则处理,并返回匹配结果.
  • test(string),测试string是否含有匹配结果

字符串对象中的正则

方法

  • match(pattern)
    • 根据pattern进行正则匹配,如果匹配到,返回匹配结果,如匹配不到返回null
  • search(pattern)
    • 根据pattern进行正则匹配,如果匹配到一个结果,则返回它的索引数;否则返回-1
  • replace(pattern,replacement)
    • 根据pattern进行正则匹配,把匹配结果替换为replacement
  • split(pattern)
    • 根据pattern进行正则分割,返回一个分割的数组

/表达式/是JavaScript中专门为简化正则表达式编写而提供的语法,写在//中的正则表达式就不用管转义符了。

判断是否匹配

var regex = /.+@.+/;
console.log(regex.test("a@b.com"));//true
console.log(regex.test("ab.com"));//false

获取匹配结果

exec(str)进行搜索匹配,返回值为匹配结果(*),相当于c#中match()和matches()

如果 exec() 找到了匹配的文本,则返回一个结果数组(完全匹配的字符串以及提取组的结果。)。否则,返回 null。 要提取多个需要反复调用exec()类似于matches()方法。

  • 注意全局模式        /…../g
    • 在非全局模式下,调用一次exec()相当于match(),在全局模式下连续多次调用相当于matches()
  • —i    忽略大小写
  • —m  多行匹配

一般推荐的记忆方式是,img;这个img和前端经常写img标签很类似,所以这样记忆比较方便的;

//匹配数字:  \d
"ad3ad2ad".match(/\d/g);  // ["3", "2"]
//匹配除换行符以外的任意字符:  .
"a\nb\rc".match(/./g);  // ["a", "b", "c"]
//匹配字母或数字或下划线 : \w
"a5_  汉字@!-=".match(/\w/g);  // ["a", "5", "_"]
//匹配空白符:\s
"\n \r".match(/\s/g);  //[" ", " ", ""] 第一个结果是\n,最后一个结果是\r
//匹配【单词开始或结束】的位置 : \b
"how are you".match(/\b\w/g);  //["h", "a", "y"] 
// 匹配【字符串开始和结束】的位置:  开始 ^ 结束 $
"how are you".match(/^\w/g); // ["h"]

反义元字符,写法就是把上面的小写字母变成大写的,比如 , 匹配所有不是数字的字符: \D

另外还有一些用来表示重复的元字符,会在下面的内容中介绍。

字符范围

在 [] 中使用符号 –  ,可以用来表示字符范围。如:

// 匹配字母 a-z 之间所有字母
/[a-z]/
// 匹配Unicode中 数字 0 到 字母 z 之间的所有字符
/[0-z]/ 
// unicode编码查询地址:
//https://en.wikibooks.org/wiki/Unicode/Character_reference/0000-0FFF
//根据上面的内容,我们可以找出汉字的Unicode编码范围是 \u4E00 到 \u9FA5,所以我们可以写一个正则表达式来判断一个字符串中是否有汉字
/[\u4E00-\u9FA5]/.test("测试");  // true 

重复 & 贪婪与懒惰

首先来讲重复,当我们希望匹配一些重复的字符时,就需要用到一些和重复相关的正则表达式,写法如下

//重复n次 {n}
"test12".match(/test\d{3}/); // null
"test123".match(/test\d{3}/); // ["test123"]
//重复n次或更多次  {n,}
"test123".match(/test\d{3,}/); //  ["test123"]
//重复n到m次
"test12".match(/test\d{3,5}/); //  null
"test12345".match(/test\d{3,5}/);  // ["test12345"]
"test12345678".match(/test\d{3,5}/);  // ["test12345"]
// 匹配字符test后边跟着数字,数字重复0次或多次
"test".match(/test\d*/); // ["test"]
"test123".match(/test\d*/); // ["test123"]
//重复一次或多次
"test".match(/test\d+/) ; // null
"test1".match(/test\d*/); //["test1"]
//重复一次或0次
"test".match(/test\d?/) ; // null
"test1".match(/test\d?/); //["test1"]

字符转义

在正则表达式中元字符是有特殊的含义的,当我们要匹配元字符本身时,就需要用到字符转义,比如:

/\./.test("."); // true

匹配ip地址:

  • \d+\.\d+\.\d+\.\d+ps:提取ip地址时有用

匹配特定数字:

  • 1: ^[1-9]\d*$ //匹配正整数
  • 2: -[1-9]\d*$ //匹配负整数
  • 3: -?[1-9]\d*$ //匹配整数
  • 4: [1-9]\d*|0$ //匹配非负整数(正整数 + 0)
  • 5: -[1-9]\d*|0$ //匹配非正整数(负整数 + 0)
  • 6: [1-9]\d*\.\d*|0\.\d*[1-9]\d*$ //匹配正浮点数
  • 7: -([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ //匹配负浮点数
  • 8: -?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$ //匹配浮点数
  • 9: [1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$ //匹配非负浮点数(正浮点数 + 0)
  • 10: (-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$ //匹配非正浮点数(负浮点数 + 0)

匹配特定字符串:

  • 1: ^[A-Za-z]+$ //匹配由26个英文字母组成的字符串
  • 2: ^[A-Z]+$ //匹配由26个英文字母的大写组成的字符串
  • 3: ^[a-z]+$ //匹配由26个英文字母的小写组成的字符串
  • 4: ^[A-Za-z0-9]+$ //匹配由数字和26个英文字母组成的字符串
  • 5: ^\w+$ //匹配由数字、26个英文字母或者下划线组成的字符串

~~

未经允许不得转载:WEB前端开发 » Javascript中的正则表达式使用方法

赞 (0)