Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在负索引之前提取所有字符串_Javascript_Node.js - Fatal编程技术网

Javascript 在负索引之前提取所有字符串

Javascript 在负索引之前提取所有字符串,javascript,node.js,Javascript,Node.js,长度测量的两个示例: “180厘米” “70英寸” 我想提取数字和单位。我知道单位是“cm”或“in”,因此我可以假设单位字符长度始终为2。但是,前面的数字可以是任意字符长度的任意数字 我看过各种JS字符串方法,如slice、substr、split等。我通过使用.slice(-2)来提取最后一部分,这会给我“cm”或“in” 但是如何提取第一部分呢?提供一个开始索引: “180cm”。切片(0,-2)/“180” 另一种方法 var str=“1234in”; var res=str.s

长度测量的两个示例:

  • “180厘米”
  • “70英寸”
我想提取数字和单位。我知道单位是“cm”或“in”,因此我可以假设单位字符长度始终为2。但是,前面的数字可以是任意字符长度的任意数字

我看过各种JS字符串方法,如slice、substr、split等。我通过使用
.slice(-2)
来提取最后一部分,这会给我“cm”或“in”

但是如何提取第一部分呢?

提供一个开始索引:

“180cm”。切片(0,-2)/“180”
另一种方法

var str=“1234in”;
var res=str.substring(0,str.length-2);
控制台日志(res)您可以这样使用


function getData(data) {
   var number = data.slice(0, -2);
   var unit = data.slice(data.length-2);
   return [number, unit]
}

getData(“155cm”)将返回[“155”,“cm”]


getData(“1554241in”)将返回[“1554241”,“in”]

下面是一个使用正则表达式和命名组的更通用的解决方案:

const VALUE_GROUP_NAME = 'value';
const UNIT_GROUP_NAME = 'unit';

const UNITS = ['cm', 'in'];

const regExp = new RegExp(`^(?<${VALUE_GROUP_NAME}>[0-9.]+)(?<${UNIT_GROUP_NAME}>${UNITS.join('|')})$`);

const result = '10cm'.match(regExp).groups;

console.log(result[VALUE_GROUP_NAME]); // or simply result.value
console.log(result[UNIT_GROUP_NAME]); // or simply result.unit
const VALUE\u GROUP\u NAME='VALUE';
常量单位\组\名称='单位';
常量单位=['cm','in'];
const regExp=new regExp(`^(?[0-9.]+)(?${UNITS.join('|')})$`);
常量结果='10cm'。匹配(regExp).groups;
console.log(结果[值组名称]);//或者仅仅是结果。价值
console.log(结果[单元组名称]);//或者仅仅是结果单位
这里的好处是它将只匹配包含该模式的字符串,并且只识别在数组中预定义的特定度量单位,从而避免意外错误。如果需要捕获数值后所有可能的“单位”或任意字符串(具有任意长度),可以将正则表达式更改为类似以下内容:

const regExp = new RegExp(`^(?<${VALUE_GROUP_NAME}>[0-9.]+)(?<${UNIT_GROUP_NAME}>[A-z]+$`);
const regExp=new regExp(`^(?[0-9.]+)(?[A-z]+$`);

这是一个易于扩展的解决方案,不需要重构来处理新的情况,与简单地使用具有静态长度的
子字符串
相反,这在引入具有不同长度的第三个单元时根本不是一个解决方案。

哇……真不敢相信我没有尝试过。谢谢!您可以使用前缀
+
进行转换如果需要,可以将字符串转换为数字。例如:
const num=+“180cm”。slice(0,-2)
您是否知道是否可以同时分离和提取这两个字符串?例如const[val,unit]=…something。遗憾的是,Javascript没有在索引处分割字符串的内置方法。不过正则表达式有一种方法:
const[val,unit]=“180cm”。匹配(/^(\d+)(厘米英寸)$/)。切片(1);