呼如林
2022-06-09 18:57:59
我試圖在開頭提取任何文本字符,以及字符串的以下兩個數字。如果字符串以數字開頭,我想獲得一個空字符串值,因此結果數組仍然包含 3 個值。細繩: 'M2.55X.45'代碼: 'M2.55X.45'.match(/(^[a-zA-Z]+)|((\.)?\d+[\/\d. ]*|\d)/g)預期的: ["M", "2.55", ".45"]實際(正確): ["M", "2.55", ".45"]細繩: '2.55X.45'代碼: '2.55X.45'.match(/(^[a-zA-Z]+)|((\.)?\d+[\/\d. ]*|\d)/g)預期的: ["", "2.55", ".45"]實際的: ["2.55", ".45"]
3 回答

Qyouu
TA貢獻1786條經驗 獲得超11個贊
您當前的正則表達式使用備用子句 ( |),它根據匹配的備用子句創建不同類型的分組。
這是一個創建顯式組并使各個組可選的示例(稍微整理一下)。
const regex = /^([a-zA-Z]*)?(\d*(?:\.\d+)?)([a-zA-Z]+)(\d*(?:\.\d+)?)$/
console.log(regex.exec("2.55X.45"))
console.log(regex.exec("M2.55X.45"))
請注意,我已刪除該g標志,因此不會保留正則表達式的狀態。
我還使用exec而不是match不丟棄捕獲組。

人到中年有點甜
TA貢獻1895條經驗 獲得超7個贊
你可以試試這個模式
(\D*)(\d+(?:\.\d+))\D+(\.\d+)
let finder = (str) => {
return (str.match(/^(\D*)(\d+(?:\.\d+))\D+(\.\d+)/) || []).slice(1)
}
console.log(finder('M2.55X.45'))
console.log(finder("2.55X.45"))
添加回答
舉報
0/150
提交
取消