正则?=,?:,?!
'adsaaa'.replace(/a(?=d)/g,'c') // "cdsaaa" 非获取性匹配,只将后面有d的a替换成c 'adsaaa'.replace(/a(?:d)/g,'c') // "csaaa" 此时等同于/ad/,将ad替换成c 'adsaaa'.replace(/a(?!d)/g,'c') // "adsccc" 将后面不是d的a替换成c 'adsaaa'.match(/a(?=d)/g) // ["a"] 'adsaaa'.match(/a(?:d)/g) // ["ad"] 'adsaaa'.match(/a(?!d)/g) // ["a", "a", "a"]
其中?:的用处主要是在有|的时候,很好用,例如a(?:d|r)匹配的就是ad或者ar
(?<=pattern),?<!pattern)这两个js里现在都用不了