我有一個字串:
let y = ".1875 X 7.00 X 8.800";
我想將此作為 3 個數字的陣列回傳:0.1875、7.00、8.800
我需要將 .1875 轉換為 0.1875,但是您不能只針對第一個字符,因為如果字串是這樣的:
let x = "7.00 X .1875 X 8.800";
or another difficult example
let y = ".50" x 1.25" x 7.125" will make one part"
這是我迄今為止的嘗試:
let numbers = x.match(/(\d*\.)?\d /g)
numbers.map(n => parseFloat(n))
var thickness = numbers[0]
var width = numbers[1]
var length = numbers[2]
if(thickness.charAt(0) == '.'){
let stringA = numbers[0].match(/^(\.)/g)
let stringB = "0"
thickness.replace(stringA, stringB)
console.log(thickness)}
else {
alert('failure');
}
好像換不了 在 .1875 到 0.1875 之間,非常感謝任何幫助!
uj5u.com熱心網友回復:
從上面的評論...
OP 實際上不希望“...將其作為 3 個數字的陣列回傳:
0.1875,7.00,8.800” ,而是作為 3 個字串化數字的陣列,具有經過清理/標準化的數字格式"0.1875","7.00","8.800".
一種可能的方法是結合
- 取……
/(?<!\d)(?:\d*\.)?\d /g和…… - 規范化 ...
.replace(/^\./, '0$&')... 有效數字格式。
const sampleData = `
.1875 X 7.00 X 8.800
7.00 X .1875 X 8.800
.50" x 1.25" x 7.125" will make one part
.1875 X 7.00 X 8.800 X 456 X 13.45.56.343.343.
`;
// see ... [(?<!\d)(?:\d*\.)?\d ]
const regXValidNumber = /(?<!\d)(?:\d*\.)?\d /g;
console.log(
sampleData
// retrieving the array of
// valid stringified numbers.
.match(regXValidNumber)
);
console.log(
sampleData
// retrieving the array of
// valid stringified numbers.
.match(regXValidNumber)
// normalizing the number format.
.map(str => str.replace(/^\./, '0$&'))
);
.as-console-wrapper { min-height: 100%!important; top: 0; }
uj5u.com熱心網友回復:
這是使用正則運算式的一種方法:
let x = "7.00 X .1875 X 8.800";
const pattern = /\d*\.?\d /g;
const numbers = [...x.matchAll(pattern)].map(Number);
console.log(numbers);
\d*: 盡可能匹配 0 到無限次之間的任何數字。\.?: 可選匹配.。\d: 盡可能匹配 1 到無限次之間的任何數字。
uj5u.com熱心網友回復:
“我想將此作為 3 個數字的陣列回傳:0.1875、7.00、8.800”
這三個數等于并表示為0.1875和。78.8
拆分字串并決議數字:
let y = ".1875 X 7.00 X 8.800";
console.log(y.split(' X ').map(Number));
let x = "7.00 X .1875 X 8.800";
console.log(x.split(' X ').map(Number));
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/448806.html
標籤:javascript 正则表达式 细绳 代替 匹配
上一篇:區分純數字字串和其他字串
