js中正则表达式与Python中正则表达式的区别
今天女票让我帮她写一个js中的正则,来提取电话号码,对于正则规则来说,js与python是基本没有区别的,重点的区别是在一些函数与方法中。
python中的正则提取:
import re str = \'asfasdfgasffas青蛙无法·啊沙发上,。,从 dw2efdrqw15894648760asfasf\' \ \'asf,./asf029-81464970jhklasdnf,wsdn15888888888\' patt = \'1[3,5,8,7]\d{9}|0\d{2}-\d{8}\' data = re.findall(patt, str) print(data)
js中的正则提取:
<script> $(\'#id1\').click(function () { var test = \'asfasdfhakj啊是法律dsh15894648760asfadf欺负我,。, 。qwe jfwj029-81464970asfafaflame\'; var patt= /1[3,5,8,7]\d{9}|0\d{2}-\d{8}/g; alert(test.match(patt)) }) </script>
两者主要区别:
(1)在python中,正则表达式其本质上是一个字符串,所以用引号括起来,但是在JS中,正则必须以斜杠符号 / 来包围,如
/1[3,5,8,7]\d{9}|0\d{2}-\d{8}/ 并且不能加引号。
(2)在匹配模式中,js仅仅支持 g 全局搜索, i忽略大小写, m 多行匹配这三种, 但是python支持更多。
(3)js中匹配并替换是replace函数,在python中是sub() js中的replace无论使用正则表达式还是字符串本身,默认情况下仅仅替换第一个匹配项。
(4)JS以 / 来标识正则表达式,以引号标识字符串。
(5) JS与Python都有match函数,但是意义大不相同。Python中match方法是指从字符串开始进行匹配,但是在js中match方法是类似于匹配全部,
与python中的findall()非常接近。但是还是有区别滴: 如果在js的正则中后一个/后加上g,那就与python中的findall一毛一样。会返回所有匹配到的值,
但是如果没有g,就只会返回第一个匹配到的值
(6) JS 中的search()与Python中字符串的find方法和正则表达式re模块中的search方法一样, 但是js会返回字符串的下标索引,而非字符串。
还有疏忽的地方,来日想起来再补充吧。这儿有个别的大佬写的,栗子啥的挺全的:
大佬链接:https://www.cnblogs.com/dyfblog/p/6077122.html
想了解更多Python关于爬虫、数据分析的内容,欢迎大家关注我的微信公众号:悟道Python