我有一个嵌套的价格数组,它是一个字符串,我想删除£
符号并将字符串转换成整数。我需要去除£
符号并转换为整数,以便可以使用chart.js
折线图中的值。
我一直在尝试使用正则表达式替换来删除£
符号,但是我认为由于字符串位于嵌套数组中,所以我无法使其正常运行。我似乎在网上找不到任何有关替换嵌套数组中的字符的信息。我什至没有尝试过将字符串转换为整数,但是想知道是否可以一次性解决所有问题?
这是我称为linedata的嵌套数组
var linedata = [["£14.99,£14.99,£14.99"],["£34.99,£34.99,£34.99"]]
这是我一直在玩的代码
var re = /£/g;
var newlinedata = linedata.replace(re, "");
它在chrome控制台中未返回任何内容,而离子CLI会踢出该错误
src / app / home / home.page.ts(66,26)中的ERROR:错误TS2339:属性 类型“ any []”上不存在“替换”。
有想法吗?
答案 0 :(得分:0)
此表达式可以帮助您替换它:
£([0-9.]+,?)
关键是将要保留的所有内容添加到捕获组()
和井号之外的井号,然后将其替换为$1
。
如果这不是您想要的表达式,则可以在regex101.com中修改/更改表达式。
您还可以在jex.im中可视化您的表达式:
const regex = /£([0-9.]+,?)/gm;
const str = `£14.99,£14.99,£14.99
£34.99,£34.99,£34.99`;
const subst = `$1`;
// The substituted value will be contained in the result variable
const result = str.replace(regex, subst);
console.log('Substitution result: ', result);
答案 1 :(得分:0)
您可以在匹配£
£(\d+(?:\.\d+)?)
£
字面上匹配(
捕获组
\d+(?:\.\d+)?
匹配1个以上的数字和一个可选部分以匹配点和1个以上的数字)
关闭群组您应该在字符串而不是数组上使用replace。
要将包含字符串的嵌套数组转换为数字数组,可以使用map,在替换中使用包含您的值的$1
指向捕获组。
例如:
var linedata = [
["£14.99,£14.99,£14.99"],
["£34.99,£34.99,£34.99"]
].map(ary =>
ary[0].split(',')
.map(v => Number(v.replace(/£(\d+(?:\.\d+)?)/g, "$1")))
);
console.log(linedata);
或者,如果要保留多个嵌套数组,则可以使用其他映射。
var linedata = [
["£14.99,£14.99,£14.99"],
["£34.99,£34.99,£34.99", "£34.99,£34.99,£34.99"]
].map(ary => ary
.map(s => s.split(',')
.map(v => Number(v.replace(/£(\d+(?:\.\d+)?)/g, "$1")))
)
);
console.log(linedata);