首页 > 解决方案 > 如何捕获度量(数字和/或单位)和度量的事项并始终确保相同的度量格式/模式?

问题描述

我只是想了解 javascript,因为我对它有点陌生,而且它是一种功能强大的语言。

我想知道如何重新排列字符串中的单词和数字,以便某些单词始终位于前面。因此,在这种情况下,数字和测量值将始终位于值的前面。

例如,输入的所需输出:

Function input: Wood Plank 1 cm
Function output: 1 cm Wood Plank

Function input: Lawn Mower 1
Function output: 1 Lawn Mower

Function input: Tape Measure
Function output: Tape Measure

我有我制作的这个正则表达式,但我需要知道如何应用它

const unitCapturingRegX = (/^(?<amount>¼|½|¾|\d+\/\d+|\d+)\s*(?<value>.*)$/);

我在下面得到了一些测量结果:

const measures = [
  "cm", "m", "kg", "kgs", "kilogram", "kilograms", "l", "liter" ,"tbs","meter", "inch",
];

这是我的输入值:

const inputVal = [
  'Tape 1/2 cm',
  '1kg cement',
  '3 l water',
  'carbon fibre ½ inch'
]

这是可能的事情吗,请有人帮助我!

标签: javascriptregexreplacecapture-group

解决方案


将单位添加到正则表达式的末尾

var re = /(.*)\s(¼|½|¾|\d+\/\d+|\d+)\s?(cm|m|kg|kgs|kilogram|kilograms|l|liter|tbs|meter|inch)?$/;

const inputVal = [
  'Tape 1/2 cm',
  'cement 1kg',
  '1kg cement',
  '3 l water',
  'water 3 l',
  'carbon fibre ½ inch',
  'Lawn Mower 1'
]

const altered = inputVal.map(function(str) {
  return str.replace(re, "$2 $3 $1") // or "$2$3 $1"
})

console.log(altered);

并从数组中生成它

const measures = [
  "cm", "m", "kg", "kgs", "kilogram", "kilograms", "l", "liter" ,"tbs","meter", "inch",
];

var units = measures.join("|");
var re = new RegExp("(.*)\\s(¼|½|¾|\\d+\\/\\d+|\\d+)\\s?(" + units + ")?$");

const inputVal = [
  'Tape 1/2 cm',
  'cement 1kg',
  '1kg cement',
  '3 l water',
  'water 3 l',
  'carbon fibre ½ inch'
]

const altered = inputVal.map(function(str) {
  return str.replace(re, "$2 $3 $1") // or "$2$3 $1"
})

console.log(altered);


推荐阅读