如何从嵌套数组中删除£符号并将字符串转换为整数

时间:2019-05-15 22:01:27

标签: regex typescript str-replace ionic4

我有一个嵌套的价格数组,它是一个字符串,我想删除£符号并将字符串转换成整数。我需要去除£符号并转换为整数,以便可以使用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 []”上不存在“替换”。

有想法吗?

2 个答案:

答案 0 :(得分:0)

此表达式可以帮助您替换它:

£([0-9.]+,?)

关键是将要保留的所有内容添加到捕获组()和井号之外的井号,然后将其替换为$1

RegEx

如果这不是您想要的表达式,则可以在regex101.com中修改/更改表达式。

enter image description here

RegEx电路

您还可以在jex.im中可视化您的表达式:

enter image description here

JavaScript演示

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个以上的数字
  • )关闭群组

Regex demo

您应该在字符串而不是数组上使用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);