整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

JavaScript之正则表达式教程

则表达式在js中有很多用途,最常见的是在表单验证中,验证一些字符串是否符合要求,如email、手机号等等,学好正则对于前端工程师来说是一个不错的辅助技能。

图片来自网络

一、特殊字符

1、$

正则的结尾符号

2、^

开始符号

3、()

标记一个子表达式的开始和结束位置

4、[]

匹配括号中任意一个; 例:

结果就是true

5、{}

括号里是匹配几个,一般用来限制位数;例:

匹配位数是4~7位,7个a返回true,8个就false;

有三种用法:

{3}:表示匹配三位;

{3,}:表示匹配三位及以上;

{3,7}:表示匹配3到7位

6、*

表示匹配0次或多次;相当于{0,}

7、?

表示要匹配的是0或1位;

8、+

表示匹配前面的字符串一次或多次

9、.

匹配任意字符

10、|

“或”:不解释

11、\w

字母、数字、下划线

12、\W

非字母、数字、下划线

13、\d

数字,等价于[0-9]

14、\D

非数字,等价于[^0-9]

15、\s

匹配空格

二、js方法

1、match方法:

挑选相匹配的内容:例:

结果是“1,2,3”

2.test方法:

返回一个布尔值,表示是否匹配

上述结果是“true”

3、replace方法:

用于将匹配正则的字符串进行替换,例:

前面//里面是被替换的内容,后面加的字符串是要替换的内容。

例:var path=req.url.replace(/\/?(?:\?.*)?$/,'').toLowerCase();

获取“/”后边的路径。

则表达式,一个十分古老而又强大的文本处理工具,仅仅用一段非常简短的表达式语句,便能够快速实现一个非常复杂的业务逻辑。熟练地掌握正则表达式的话,能够使你的开发效率得到极大的提升。

下面是一些常用的正则匹配:

1 . 校验密码强度

密码的强度必须是包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间。

^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$

2. 校验中文

字符串仅能是中文。

^[\一-\龥]{0,}$

3. 由数字、26个英文字母或下划线组成的字符串

^\w+$

4. 校验E-Mail 地址

同密码一样,下面是E-mail地址合规性的正则检查语句。

[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\w](?:[\w-]*[\w])?\.)+[\w](?:[\w-]*[\w])?

5. 校验身份证号码

下面是身份证号码的正则校验。15 或 18位。

15位:

^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$

18位:

^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$

6. 校验日期

“yyyy-mm-dd“ 格式的日期校验,已考虑平闰年。

^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$

7. 校验金额

金额校验,精确到2位小数。

^[0-9]+(.[0-9]{2})?$

8. 校验手机号

下面是国内 13、15、18开头的手机号正则表达式。(可根据目前国内收集号扩展前两位开头号码)

^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$

9. 判断IE的版本

IE目前还没被完全取代,很多页面还是需要做版本兼容,下面是IE版本检查的表达式。

^.*MSIE [5-8](?:\.[0-9]+)?(?!.*Trident\/[5-9]\.0).*$

10. 校验IP-v4地址

IP4 正则语句。

\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b

11. 校验IP-v6地址

IP6 正则语句。

(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))

12. 检查URL的前缀

应用开发中很多时候需要区分请求是HTTPS还是HTTP,通过下面的表达式可以取出一个url的前缀然后再逻辑判断。

if (!s.match(/^[a-zA-Z]+:\/\//)){ s = 'http://' + s;}

13. 提取URL链接

下面的这个表达式可以筛选出一段文本中的URL。

^(f|ht){1}(tp|tps):\/\/([\w-]+\.)+[\w-]+(\/[\w- ./?%&=]*)?

14. 文件路径及扩展名校验

验证windows下文件路径和扩展名(下面的例子中为.txt文件)

^([a-zA-Z]\:|\)\([^\]+\)*[^\/:*?"<>|]+\.txt(l)?$

15. 提取Color Hex Codes

有时需要抽取网页中的颜色代码,可以使用下面的表达式。

^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$

16. 提取网页图片

假若你想提取网页中所有图片信息,可以利用下面的表达式。

\< *[img][^\>]*[src] *= *[\"\']{0,1}([^\"\'\ >]*)

17. 提取页面超链接

提取html中的超链接。

(<a\s*(?!.*\brel=)[^>]*)(href="https?:\/\/)((?!(?:(?:www\.)?'.implode('|(?:www\.)?', $follow_list).'))[^"]+)"((?!.*\brel=)[^>]*)(?:[^>]*)>

18. 查找CSS属性

通过下面的表达式,可以搜索到相匹配的CSS属性。

^\s*[a-zA-Z\-]+\s*[:]{1}\s[a-zA-Z0-9\s.#]+[;]{1}

19. 抽取注释

如果你需要移除HMTL中的注释,可以使用如下的表达式。

<!--(.*?)-->

20. 匹配HTML标签

通过下面的表达式可以匹配出HTML中的标签属性。

<\/?\w+((\s+\w+(\s*=\s*(?:".*?"|'.*?'|[\^'">\s]+))?)+\s*|\s*)\/?>

最后推荐一款正则表达式在线测试工具

regex101是一个非常不错的正则表达式在线测试工具,你可以直接在线测试你的正则表达式哦。

在JavaScript中,正则表达式(Regular Expression,简称RegExp)是一种强大的文本处理工具,它提供了查找、替换和提取字符串中模式匹配项的强大功能。本文将带领您深入理解JavaScript中的正则表达式,并通过实例演示其常见用法与高级特性。

1. 创建正则表达式

在JavaScript中创建一个正则表达式有两种方式:

  • 字面量形式:
let regex = /pattern/flags;

例如,查找所有的数字:

let numbersRegex = /\d+/;
  • 构造函数形式:
let regex = new RegExp('pattern', 'flags');

同样的例子,使用构造函数形式:

let numbersRegex = new RegExp("\d+", "");

注意:在构造函数中写入字符串时,需要对特殊字符进行转义。

2. 正则表达式模式

正则表达式的主体部分是“模式”,用于描述要匹配的文本结构。以下是一些基本模式示例

  • \d 匹配任何数字(等同于 [0-9])
  • \w 匹配字母、数字或下划线(等同于 [a-zA-Z0-9_])
  • \s 匹配任何空白字符(包括空格、制表符、换行符等)
  • . 匹配除换行符之外的任意单个字符
  • ^ 匹配字符串的开始位置
  • $ 匹配字符串的结束位置
  • * 表示前面的元素可以重复零次或多次
  • + 表示前面的元素至少重复一次
  • ? 表示前面的元素可选,出现零次或一次
  • {n} 表示前面的元素必须重复n次
  • {n,} 表示前面的元素至少重复n次
  • {n,m} 表示前面的元素重复次数在n到m之间

3. 标志位

标志位位于正则表达式末尾,用于改变匹配行为:

  • g 全局搜索,匹配字符串中的所有符合条件的位置,而不是只找到第一个就停止。
  • i 忽略大小写。
  • m 多行模式,使^和$可以匹配每一行的开始和结束。

4. 正则方法应用

在JavaScript中,我们可以使用以下内置的方法来操作正则表达式:

  • test():检测字符串是否符合某个正则表达式。
let isNumber = /\d+/.test("123");
console.log(isNumber); // true
  • match():在字符串上执行查找,返回匹配结果数组或者null。
let matches = "Hello 123 World".match(/\d+/);
console.log(matches[0]); // "123"
  • exec():在字符串上执行查找,返回包含匹配信息的对象或者null。
let reg = /\d+/g;
let matchResult = reg.exec("Hello 123 World");
console.log(matchResult[0]); // "123"
  • search():返回字符串中第一个匹配项的索引,如果没有找到则返回-1。
let index = "Hello 123 World".search(/\d+/);
console.log(index); // 6
  • replace():使用新的子串替换与正则表达式匹配的子串。
let replacedStr = "Hello 123 World".replace(/\d+/, "456");
console.log(replacedStr); // "Hello 456 World"
  • split():根据正则表达式分隔字符串,返回一个由分割后的子串组成的数组。
let words = "Hello World, How are you?".split(/\s*,\s*/);
console.log(words); // ["Hello World", "How are you?"]

5. 高级技巧

  • 非捕获组 (?:...):不捕获括号内的内容,仅作分组之用。
  • 负向前瞻 (?=...) 负向后瞻 (?!...):用来断言后面或前面的内容,但并不包含在匹配结果内。
  • 反向引用 \n:匹配第n个括号里的内容。
let regex = /(hello)\s+(world)(?=\!)/;
let str = "hello world!";
let match = str.match(regex);
console.log(match[1]); // "hello"
console.log(match[2]); // "world"

6.小结

JavaScript中的正则表达式功能强大且灵活,熟练掌握这一工具能极大地提高开发效率,尤其是在数据清洗、验证和搜索等场景。希望这篇指南能帮助你更好地理解和运用正则表达式,实际操作中还需结合具体需求进行调整和优化。