PC端谷歌址否、Edge瀏覽器正常運行餐蔬,移動端安卓設(shè)備能夠正常運行的正則。? 在IPhone系設(shè)備佑附,IOS系統(tǒng)中的Safari瀏覽器用含、QQ瀏覽器都出現(xiàn)報錯。報錯信息在JS中使用try..catch語句獲取到:SyntaxError:Invalid regular expression:invalid group specifier name帮匾。
由于項目簡單啄骇,在隨機生成姓名,電話等虛擬信心的方法中瘟斜,用了正則零寬先行和后行斷言缸夹。(因為很少用正則,也知道正則開銷大螺句,但因為小項目虽惭,就想著練個手)
其實只要這樣寫就好了。
然后寫了個很長的斷言蛇尚,沒錯就是打個星星的事芽唇,甚至在vue 統(tǒng)一的filter管理里面也有對應(yīng)打星星方法啊。
而且新方法沒有開始沒有些try catch? (這么簡單的東西,應(yīng)該不會錯)
說了這么多就順便給大家說下? 斷言吧匆笤,其實這東西真的很好用研侣。
名詞解釋
(?!)零寬負向先行斷言
(?=)零寬先行斷言? ?(我用了)
(?<=)零寬后行斷言? ? (我用了)
(?<!)零寬負向后行斷言。
通俗解釋
?!后面不是什么炮捧,且找到這個位置
?=后面是什么庶诡,且找到這個位置
?<=前面是什么,且找到這個位置
?<!前面不是什么咆课,且找到這個位置
案例 :拿到字符串中的數(shù)字末誓,當(dāng)然后? \d也能用啊,正則沒有最好寫法书蚪,只有最合適的喇澡。
小提示:斷言要寫括號包住,但是他不是在原子組里的殊校。
{//使用斷言匹配寫法
? ? ? ? let str = "SCscHero123SCscHero";
? ? ? ? let reg = /(?<=SCscHero)\d+(?=SCscHero)/g;
? ? ? ? console.log(str.match(reg)[0]);
? ? {//使用分組替換寫法
? ? ? ? let str = "SCscHero123SCscHero";
? ? ? ? let reg = /SCscHero(\d+)SCscHero/;
? ? ? ? console.log(str.match(reg)[1]);
? ? }
就是個小例子撩幽,其他斷言也是類似的。