很多情況下,我們只需要匹配表達式中間的內容,對於匹配位置的內容是不需要的,例如下圖的左右括號,我知道零寬斷言可以做到,但是js不支持反向斷言,請問有其他的正規方式一步處理到位嗎?後續字串截取處理的方案最好不要發了
用正規裡的捕獲組沒錯,另外擴充下你的思路:replace方法可以結合捕獲組一起使用,逼格很高。
replace
"transform: scale(-12312.212) rotate(-0.23deg) translateX(0.31px);" .replace(/[^(]*\((-?\d+\.?\d+\w+?)\)[^(]*/g, function(m, p) { return p+' '; }); // "-12312.212 -0.23deg 0.31px "
更多js正規的系統知識,推薦深入閱讀 正規表示式前端使用手冊,這篇文章我斷斷續續寫了兩個月,如果沒有用你打我,保證不還手。
你用捕獲組去拿呀
正則裡的Group可以實現你的需求。 在寫你寫的正則基礎上,加上一對括號(表示一個Group,擴住你真正想要的部分)即可. ((-?d+.?d+([a-z]+)?))
((-?d+.?d+([a-z]+)?))
測試程式碼, 其中myRegexp.exec方法回傳的是一個數組,第一個元素是正規匹配到的字串,包括你「不希望看到」的括號。 第二個元素(即下標為1)對應你正規表示式中第一個括號所捕獲的內容,也就是你想要的數字及單位部分。
var myString = 'scale(-12312.212)skdk, rotate(-0.23deg)..+-(800)-555-2468'; var myRegexp = /\((-?\d+\.?\d+([a-z]+)?)\)/g; match = myRegexp.exec(myString); while (match != null) { console.log(match[1]) match = myRegexp.exec(myString); }
利用正規的分組就能搞定了先用/g把目標字串都配對出來然後對每個使用不帶/g的正則取到結果中的1組,也就是你需要的值,直接上程式碼吧用括號括起來就是一個捕獲組,詳細用法自行google
用正規裡的捕獲組沒錯,另外擴充下你的思路:
replace
方法可以結合捕獲組一起使用,逼格很高。更多js正規的系統知識,推薦深入閱讀 正規表示式前端使用手冊,這篇文章我斷斷續續寫了兩個月,如果沒有用你打我,保證不還手。
你用捕獲組去拿呀
正則裡的Group可以實現你的需求。
在寫你寫的正則基礎上,加上一對括號(表示一個Group,擴住你真正想要的部分)即可.
((-?d+.?d+([a-z]+)?))
測試程式碼, 其中myRegexp.exec方法回傳的是一個數組,第一個元素是正規匹配到的字串,包括你「不希望看到」的括號。 第二個元素(即下標為1)對應你正規表示式中第一個括號所捕獲的內容,也就是你想要的數字及單位部分。
利用正規的分組就能搞定了
先用/g把目標字串都配對出來
然後對每個使用不帶/g的正則取到結果中的1組,也就是你需要的值,直接上程式碼吧
用括號括起來就是一個捕獲組,詳細用法自行google