javascript.split不返回期望值

时间:2018-09-14 14:38:06

标签: javascript split

我有一个包含字符串的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则为空。

就连字符和连字符以及空格分开而言,我在这里做错了什么?

7 个答案:

答案 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"]。您可以在12索引中看到它们是空白。您可以略微修改正则表达式

var value = "123 / 15 - Value1";

var splitVal = value.split(/[\/-]/),
  number1 = splitVal[0].trim(),
  number2 = splitVal[1],
  name = splitVal[2];

console.log(number1, number2, name)