javascript - 求助關于js正則問題
問題描述
很多情況下,我們只需要匹配表達式中間的內(nèi)容,對于匹配位置的內(nèi)容是不需要的,例如下圖的左右括號,我知道零寬斷言可以做到,但是js不支持反向斷言,請問有其他的正則方式一步處理到位嗎?后續(xù)字符串截取處理的方案最好不要發(fā)了
問題解答
回答1:用正則里的捕獲組沒錯,另外擴充下你的思路:replace方法可以結(jié)合捕獲組一起使用,逼格很高。
'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正則的系統(tǒng)知識,推薦深入閱讀 正則表達式前端使用手冊,這篇文章我斷斷續(xù)續(xù)寫了兩個月,如果沒有用你打我,保證不還手。
回答2:你用捕獲組去獲取呀
回答3:正則里的Group可以實現(xiàn)你的需求。在寫你寫的正則基礎上,加上一對括號(表示一個Group,擴住你真正想要的部分)即可. ((-?d+.?d+([a-z]+)?))
測試代碼, 其中myRegexp.exec方法返回的是一個數(shù)組,第一個元素是正則匹配到的字符串,包括你“不希望看到”的括號。 第二個元素(即下標為1)對應你正則表達式中第一個括號捕獲的內(nèi)容,也就是你想要的數(shù)字及單位部分。
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);}回答4:
利用正則的分組就能搞定了先用/g把目標字符串都匹配出來然后對每個使用不帶/g的正則取到結(jié)果中的1組,也就是你需要的值,直接上代碼吧用括號括起來就是一個捕獲組,詳細用法自行google
相關文章:
1. HTML5不支持frameset一般怎么解決?2. javascript - Vue的計算屬性底層依賴原理是怎么樣?3. javascript - jquery怎么給select option一個點擊時觸發(fā)的事件,如圖 如果選擇自定義觸發(fā)一個時間?4. 網(wǎng)頁爬蟲 - python爬蟲用BeautifulSoup爬取<s>元素并寫入字典,但某些div下沒有這一元素,導致自動寫入下一條,如何解決?5. 百度地圖api - Android百度地圖SDK,MapView上層按鈕可見卻不可觸,怎么解決?6. mysql 獲取時間函數(shù)unix_timestamp 問題?7. html5 - canvas中的mousedrag事件,為什么鼠標拖出canvas,然后再次移入canvas,drag事件還觸發(fā)8. 新入手layuiadmin,部署到tp中。想用php自已寫一個后臺管理系統(tǒng)。9. javascript - react 組件 使用super()報錯10. javascript - es6擴展運算符...的問題
