Reputation: 324
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
Upvotes: 0
Views: 93
Reputation: 160
This should do the trick:
const getFilter = str => str.match(/ *\d+\.\d+(?= *SR)/).map(val => val.trim());
console.log(getFilter("Black coffee preparing with v60 filter18.00 SR38 Calories")); // ["18.00"]
console.log(getFilter("Black coffee preparing with v60 filter18.0 SR38 Calories")); // ["18.0"]
console.log(getFilter("Black coffee preparing with v60 filter 18.0SR38 Calories")); // ["18.0"]
console.log(getFilter("Black coffee preparing with v60 filter18.0 SR38 Calories")); // ["18.0"]
console.log(getFilter("Black coffee preparing with v60 filter18.0SR38 Calories")); // ["18.0"]
console.log(getFilter("Black coffee preparing with v60 filter200.001 SR38 Calories")); // ["200.001"]
I added security on any space, which will then need .trim()
In case the value can only be a decimal with two digits before the decimal point, you will have to use this regex instead:
/ *\d{2}\.\d+(?= *SR)/
The best would be for you to send us all possible cases, for a definitive regex...
Good luck !
Upvotes: 0
Reputation: 5863
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.Upvotes: 1
Reputation: 106
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('.'))
Upvotes: 1
Reputation: 19493
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)
Upvotes: 2