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英寸”
.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);