我有一个包含字符串的javascript值:
value = "123 / 15 - Value1"
我正在尝试分割定界符,以便我可以拥有每个数字,并且字符串值是它们自己的变量。
我尝试过:
value = "123 / 15 - Value1"
splitVal = value.split(/[" ".,\/ -]/);
number1 = splitVal[0];
number2 = splitVal[1];
name = splitVal[2];
但是,当我控制台日志数字1,数字2和名称时,我在控制台中只得到'123',其他2则为空。
就连字符和连字符以及空格分开而言,我在这里做错了什么?
答案 0 :(得分:2)
您可以将String.prototype.match()
和解构分配与以下RegExp
一起使用:
const value = '123 / 15 - Value1'
const [, number1, number2, name] = value.match(/(\d+) *\/ *(\d+) *- *(.+)/)
console.log(number1, number2, name)
答案 1 :(得分:2)
问题是您在(空格)和
/
处分开,所以123 / 15
变成:
[
'123',
// space
'',
// /
'',
// space
'15'
]
如果您知道模式的外观,则可以使用match
而不是split:
value = "123 / 15 - Value1"
matchVal = value.match(/^(\d+)\s*\/\s*(\d+)\s*-\s*(.*)$/);
console.dir(matchVal)
使用match,您可以准确定义输入的格式,以及要提取输入的字段。
此外,如果需要的话,它允许name
类似于Value-1 with spaces
(如果不允许这样做,则可以将(.*)
更改为限制性更强的匹配项):
value = "123 / 15 - Value-1 with spaces"
matchVal = value.match(/^(\d+)\s*\/\s*(\d+)\s*-\s*(.*)$/);
console.dir(matchVal)
使用regex101.com帮助您了解正则表达式的earch部分的作用。
答案 2 :(得分:1)
使用
console.table("123 / 15 - Value1".split(/[" ".,\/ -]/))
您会发现真正发生的是除索引0、3、6以外的所有值都是空字符串
答案 3 :(得分:1)
您可以使用match()
代替split()
:
var value = "123 / 15 - Value1"
var splitVal= value.match(/[a-z0-9]+/gi);
console.log(splitVal)
答案 4 :(得分:0)
使用正则表达式提取值而不是尝试使用定界符可能会更幸运。
let str = '123 / 15 - Value1';
let reg = /\w+/g;
let res;
let results = [];
while ((res = reg.exec(str)) !== null) {
results.push(res);
}
if (results.length > 0) {
console.log('Results = ' + results);
} else {
console.log('No results.')
}
答案 5 :(得分:0)
这将起作用:
splitVal= value.split(/[" ".,\/ -]+/);
在正则表达式的末尾添加“ +”。它告诉正则表达式必须至少出现一次(即不允许使用空字符串),这就是为什么您的拆分返回空字符串(从正则表达式接收到)的原因。
答案 6 :(得分:0)
代码中的正则表达式产生["123", "", "", "15", "", "", "Value1"]
。您可以在1
和2
索引中看到它们是空白。您可以略微修改正则表达式
var value = "123 / 15 - Value1";
var splitVal = value.split(/[\/-]/),
number1 = splitVal[0].trim(),
number2 = splitVal[1],
name = splitVal[2];
console.log(number1, number2, name)