javascript - 求助關於js正規問題
某草草
某草草 2017-05-16 13:39:37
0
4
434

很多情況下,我們只需要匹配表達式中間的內容,對於匹配位置的內容是不需要的,例如下圖的左右括號,我知道零寬斷言可以做到,但是js不支持反向斷言,請問有其他的正規方式一步處理到位嗎?後續字串截取處理的方案最好不要發了

某草草
某草草

全部回覆(4)
世界只因有你

用正規裡的捕獲組沒錯,另外擴充下你的思路:
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]+)?))

測試程式碼, 其中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

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!