详解JavaScript中的正则表达式

打游戏也要有梦想 2021-05-04 10:48:23
javascript 正则表达式 正则 详解 表达式


实际工作中,JavaScript正则表达式还是经常用到的。所以这部分的知识是非常重要的。

一、基础语法:

第一种:字面量语法

var expression=/pattern/flags;

第二种:RegExp构造函数语法

var pattern = /\w/gi; //字面量语法
var pattern = new RegExp('\\w', 'gi');//构造函数语法,这两者是等价的

这里有个注意点就是:如果正则表达式是动态的话,只能选择第二种。
其中的flags有3个标志
g:表示全局模式,即模式将被应用于所有字符串,而非在发现第一个匹配项时立即停止;
i:表示不区分大小写模式,即在确定匹配项时忽略模式与字符串的大小写;
m:表示多行模式,即在到达一行文本末尾时还会继续查找下一行中是否存在与模式匹配的项。
当然还有其他的flags,用到的极少,不做过多阐述。
至于以上的\w什么意思,稍等,请继续往下看。

二、方法

主要有test(),search(),match(),replace()。当然还有其它的很多方法,不作阐述,毕竟用到的很少。
1、test()方法的使用
判断某个字符串中是否含有相应的字符串
2、search()方法的使用
搜索相应的字符串第一次出现的索引位置,如果未找到,则返回-1
3、match()方法的使用
返回匹配的数组
4、replace()方法的使用,这个用到的还是非常多的
匹配相应的字符串,然后将其替换成其他字符串

三、匹配表达式跟实战

1、断言:
所谓的断言呢,就是表示一个匹配在某些条件下发生。总之呢,概念有点绕,直接看下文。待我慢慢续来。

字符 描述
^ 匹配开头
$ 匹配结尾
\b 匹配单词的边界
\B 匹配非单词的边界

举个例子
我要匹配一个字符串,开头到结尾是dog,忽略大小写

var pattern = /^dog$/i;//忽略大小写
console.log(pattern.test('dog'));//true
console.log(pattern.test('sdfdog'));//false
console.log(pattern.test('dog56'));//false
console.log(pattern.test('dOG'));//true
var pattern = /\b\w+/g;//全局匹配,这里的+,是量词,代表1次或者多次
console.log('Hello World'.match(pattern));//输出['Hello','World'],这里就是match用法,返回匹配的数组。

在这里,说下,\b是匹配单词的边界,那么\B是匹配非单词的边界。一个小写,一个大写,大写是反义。那么不必我多说了吧。
再说下单词边界,可能很多人都不太清楚单词边界

我稍微解释下啊,比如说,Hello World单词边界有四个,分别是H位置,o位置,W位置,d位置
2、字符类:

元字符 描述
. 查找单个字符,除了换行和行结束符
\w 查找单词字符,相当于[A-Za-z0-9_]
\W 查找非单词字符,相当于[^A-Za-z0-9_]
下面的反义便不再罗列出来了。
\d 查找数字,相当于[0-9]
\s 查找空白字符
\0 查找NULL字符
\n 查找换行符
\f 查找换页符
\r 查找回车符
\t 查找制表符
\v 查找垂直制表符

3、范围:

字符 描述
[abc] 匹配a,b,c中的任意一个字符
[^abc] 匹配不是a,b,c中的任意一个字符
[0-9] 匹配0-9任意范围的数字,同理[a-z]匹配a-z任意范围的字符
[a-z] 匹配a到z之间的任意一个字符
x|y 匹配x或者y

4、量词:

字符 描述
n+ 匹配任何包含至少一个字符n的字符串
n* 匹配任何包含零个或多个n的字符串
n? 匹配任何包含零个或者一个n的字符串
n{x} 匹配包含x个n的字符串
n{x,y} 匹配最少x个,最多y个n的字符串

四、拓展

匹配10-36之间的数字

var pattern = /1[2-9]|[2-3][0-9]|4[0-6]/;//12-46
console.log(pattern.test(11));//false
console.log(pattern.test(12));//true
console.log(pattern.test(20));//true
console.log(pattern.test(36));//true
console.log(pattern.test(46));//true
console.log(pattern.test(47));//false

将'Hello,World!Hello'中的Hello替换成Welcome

这里主要是强调一下replace方法在正则中的使用,因为这个在实际中用到的还是非常多的。后面的flags中的g,加上跟不加上有着很大的区别的。

var pattern = /Hello/g;
var oldString = 'Hello,World!Hello';
var newString = oldString.replace(pattern, 'Welcome');
console.log(newString);//Welcome,World!Welcome

版权声明
本文为[打游戏也要有梦想]所创,转载请带上原文链接,感谢
https://www.cnblogs.com/ywjbokeyuan/p/14696605.html

  1. java call dll
  2. 用Java构建反应式REST API - Kalpa Senanayake
  3. The relationship between httpsession object and cooike and the construction of cookie object
  4. Grpc Web: a JavaScript library package to replace rest grpc
  5. java call dll
  6. Building reactive rest API with Java - kalpa Senanayake
  7. Five wonders. Feeling of visiting villa in spring
  8. Spring will be far away
  9. 最全面的SpringBoot配置文件详解
  10. 最全面的SpringBoot配置文件详解
  11. 微服务开发神器之JRebel 插件破解和实现本地及远程热部署教程
  12. 漫画 | 你还记得原生的JDBC怎么连接数据库吗?
  13. Java流及流操作示例
  14. The most comprehensive spring boot configuration file
  15. The most comprehensive spring boot configuration file
  16. Cracking and implementing jrebel plug-in of microservice development artifact
  17. Comic | do you remember how the native JDBC connects to the database?
  18. Java stream and stream operation example
  19. ftp连接windows与linux
  20. 装饰器设计模式 - Gene Zeiniss
  21. Spring 3中异步方法调用
  22. AOP相关讨论
  23. jf能支持的表现层目前只有struts 1.x么?
  24. 在j2ee中实现一般java对象数据库的方法。
  25. FTP connecting windows and Linux
  26. Decorator design pattern - gene zeiniss
  27. Asynchronous method call in spring 3
  28. Discussion on AOP
  29. Is struts 1. X the only presentation layer supported by JF?
  30. The method of realizing general Java object database in J2EE.
  31. PDF转HTML工具——用springboot包装pdf2htmlEX命令行工具
  32. Pdf to HTML tool -- Wrapping pdf2htmlex command line tool with springboot
  33. MySQL 的 in 查询不走索引?我拿什么拯救你!
  34. MySQL in query does not go index? What can I do to save you!
  35. PDF转HTML工具——用springboot包装pdf2htmlEX命令行工具
  36. Pdf to HTML tool -- Wrapping pdf2htmlex command line tool with springboot
  37. Java小白入门必学!最全数据类型和运算符笔记,附实例
  38. Java Xiaobai introduction must learn! Notes on the most complete data types and operators, with examples
  39. Spring MVC请求与响应
  40. Spring MVC request and response
  41. Java 11已经不再完全免费,不要陷入Oracle的Java 11陷阱
  42. Vue.js比jQuery更容易学习
  43. 启动/删除Docker容器时出现问题 - 如何修复
  44. eclipse run on server时出现了错误信息.求急!!
  45. 请教高手一个关于lunce的问题:java.io.IOException: Cannot rename ...\segments.new
  46. Java 11 is no longer completely free. Don't fall into the Java 11 trap of Oracle
  47. Vue. JS is easier to learn than jQuery
  48. Problem starting / deleting docker container - how to fix it
  49. There is an error message in eclipse run on server!!
  50. Ask a question about lunce: java.io.ioexception: cannot rename... \ segments.new
  51. 从零搭建Spring Boot脚手架(2):集成mybatis
  52. 从零搭建Spring Boot脚手架(4):手写Mybatis通用Mapper
  53. 只知道java反射,宁知道内省吗?
  54. Build spring boot scaffold from scratch (2): integrate mybatis
  55. Build spring boot scaffold from scratch (4): handwritten mybatis general mapper
  56. Do you prefer introspection to reflection?
  57. ASP调用SDK微信分享好友、朋友圈
  58. ASP calls SDK wechat to share friends and circle of friends
  59. BAT 必问的 MySQL 面试题你都会吗?
  60. Do you know all the MySQL interview questions that bat must ask?