I have this an example:
const str = "Icecream, Milk, vanilla syrup, ice cubes20.0 SR180 calories"
I need a way to get the 20.0 from the string, it is always positioned before SR
I tried to convert the string to array like so:
const strArr = str.split(' ');
and try to get the index of the object contain SR
const index = strArr.map((object) => object).indexOf('SR');
But it showed me a result of -1
I was thinking to get the element by index - 1
to have the result of 20.0
Any other ideas, how to make it properly?
Thanks
CodePudding user response:
If you're gonna split do it on SR
. Then extract the digits from the end of the first string.
const str = "Icecream, Milk, vanilla syrup, ice cubes20.0 SR180 calories"
var arr = str.split("SR");
var rev = arr[0].trim().split("");
var num = []
while (rev.length) {
var char = rev.pop();
if (!(char >= '0' && char <= '9' || char == ".")) {
break;
}
num.push(char);
}
var result = num.reverse().join("");
console.log(result)
CodePudding user response:
I think this might help:
const finalNumber = str.split(' SR')[0].trim().split(' ').pop().replace(/[^\d.]/g, '');
console.log(finalNumber);
EDITED:
console.log("final", str.split('SR')[0].replace(/[^\d.]/g, '').split('.').slice(-2).join('.'))
CodePudding user response:
We can use match with following regexp:
const str = "Black coffee preparing with v60 filter18.00 SR38 Calories"
const res = str.match(/\d (.\d )?(?= SR)/g)
console.log(res[0])
Regexp explain:
\d
- will match any string of digits,(.\d )?
- will match floating point (optionally thanks to?
),(?= SR)
- will match a group after main expression without including it in results.