js正则验证特殊字符 js正则表达式语法大全( 二 )

  • 捕获
捕获是一个强大的功能,也是很多时候我们使用正则的原因,同样以()来表示
例子:找出样式中的透明度值
<div id="opacity" style="opacity:0.5;filter:alpha(opacity=50);">function getOpacity(elem) {var filter = elem.style.filter;if(filter){return filter.indexOf("opacity=") >= 0 ?(parseFloat(filter.match(/opacity=([^)]*)/)[1]) / 100) + "" : ""}return elem.style.opacity}捕获主要结合exec()、match() 和 g标记使用,下面会介绍
需要强调的是,因为分组和捕获一样使用(),所以,在一个正则表达式中既有用于分组的(),也有用于捕获的()时,对于分组部分,可以加上?:,这样,结果集就只包含我们想要捕获的部分 。
示例如下:
'<div>hahahahah<div>'.match(/(<[^>]+>)([^<]+)/)> [ <div>hahahahah , <div> , hahahahah ] //两个捕获如果我们只对标签内的文本感兴趣'<div>hahahahah<div>'.match(/(?:<[^>]+>)([^<]+)/)> [ <div>hahahahah , hahahahah ] //对于<div>,我们不关心,就不要了说到?: 就要提一下长得差不多的 ?= 和 ?!
?= 表示后面必须跟着某些东西,并且结果中不包含?=指定的部分,并且不捕获
?! 表示后面必须不跟着某些东西
对比看一下
/a(?:b)/.exec('abc')> ["ab", index: 0, input: "abc"] //注意匹配的是"ab"/a(?=b)/.exec('abc')> ["a", index: 0, input: "abc"] //注意匹配的只是"a"/a(?!b)/.exec('abc')> null //没有匹配的,返回的是null再看个例子,数字字符串转千分位
function formatNumber(str) {return str.replace(/B(?=(d{3})+$)/g, ',')}formatNumber("123456789")> 1,234,567,890解释:
  1. B表示除了字符串首字母之前的边界,比如1和2之间的边界,2和3之间的边界等
  2. 后面()中的?=(d{3})+$表示上面提到的那些边界后面必须跟着3N个数字直到字符串尾部
  3. g表示全局匹配,即每个上面说的边界都要检测2,如果符合,replace把边界替换成,
4)exec()、match()与g标记
exec()和match()都是返回数组,结果集中包含捕获的内容
在正则中不包含g时,exec()和match()返回的结果集是一样的,数组中依次是 整个匹配的字符串、依次的()指定的要捕获的部分
在有g的时候,match()返回的数组中的每一项是依次匹配到的整体字符串,不包含每个匹配中捕获到的内容
对比来看
"p123 q123".match(/b[a-z]+(d+)/)> ["p123", "123", index: 0, input: "p123 q123"]"p123 q123".match(/b[a-z]+(d+)/g)> ["p123", "q123"]可以看到加上g后,返回的数组就只有匹配项了
那么,即想匹配全部,又想获取到捕获怎么办呢?
while与exec()结合
let pattern=/b[a-z]+(d+)/glet str='p123 q123'let matchwhile((match=pattern.exec(str)) !=null){console.log(match)}> ["p123", "123", index: 0, input: "p123 q123"]["q123", "123", index: 5, input: "p123 q123"]5)replace()
对于字符串的replace方法,重点说一下,其第二个参数,可是一个函数 。
对于str.replace(/xxxxx/g,function(){})
函数在每次前面的正则匹配成功时都会执行,函数的参数依次是,完整的匹配文本、依次的捕获部分、当前匹配的索引、原始字符串
"border-bottom-width".replace(/-(w)/g,function(match,capture){return ";"+capture.toUpperCase()})> "border;Bottom;Width"注意,有人可能把其中的第二个函数参数改写成箭头函数,如(..)=>{..}则可能会出错,需要当心 。
3.应用精要有了上面的认知和解析,这里再总结一下正则对象(包括两种方式创建的对象)的主要方法 。
1.test()检索字符串中指定的值 。返回 true 或 false 。这个是我们平时最常用的方法 。


以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!

「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助: