这篇文章主要讲解了“JavaScript正则表达式如何匹配字符串字面量的方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript正则表达式如何匹配字符串字面量的方法”吧!
第一次遇到这个问题, 是大概两年前写代码高亮, 从当时的解决方案到现在一共有三代, 嘎嘎. 觉得还是算越来越好的.
第一代:
//那个时候自己正则还不算很精通,也没有(?:...)这种习惯,是以寻找结束引号为入口写出的这个正则.思路混乱,也存在错误.
//比如像字面量"abc\\\"",则会匹配为"abc\\\",而正确的结果应该是"abc\\\"".
varre=/('('|.*?([^\\]'|\\\\'))|"("|.*?([^\\]"|\\\\")))/g;
第二代:
//这个匹配其实和第一代思路基本相同,也是寻找结束引号,通过给\\添加*解决了第一代的bug.
varre=/(['"])(?:.*?[^\\](?:\\\\)*)?\1/g;
第三代:
//老实说第三代是昨天晚上出题的时候突然想出来的(后来又修改过),支持多行字符串字面量,思路也有了较大的转变,从匹配结束引号变味了匹配中间内容.
varre=/(['"])(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*?\1/g
这里有一个正则里非常常用的技巧, 姑且称之为 “抢占”, 在诸如/a|./这样的正则里, 越靠前越先匹配, 通过 “抢占” 一些字符, 可以避开很多麻烦. 说起来有些抽象, 在上面这个例子里, /\\[\s\S]/就可以很自然地抢到 \” 这样的转义字符, 所以不必担心转义字符中的 ” 给匹配造成影响. 这是局部的 “抢占”, 还有更大范围的, 比如注释里的字符串或者字符串里的注释, 只要在同一个正则中, 把相关匹配都写入, 则一定是先遇到的优先. 如 /(注释正则)|(字符串正则)/g, 可以先通过这样的方式, 把内容匹配出来, 再进行进一步判断处理.
虽然可能对于多数人来说, 用处不大, 但万一呢? Best wishes~
感谢各位的阅读,以上就是“JavaScript正则表达式如何匹配字符串字面量的方法”的内容了,经过本文的学习后,相信大家对JavaScript正则表达式如何匹配字符串字面量的方法这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是恰卡编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!