Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.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.split未返回预期值_Javascript_Split - Fatal编程技术网

javascript.split未返回预期值

javascript.split未返回预期值,javascript,split,Javascript,Split,我有一个包含字符串的javascript值: value = "123 / 15 - Value1" 我试图在分隔符上拆分,这样我就可以得到每个数字,字符串值是它们自己的变量 我试过这个: value=“123/15-值1” splitVal=value.split(/[“”,\/-]/); number1=splitVal[0]; number2=splitVal[1]; name=splitVal[2]带有 您将发现真正发生的是,除了索引0、3、6之外的所有值都是空字符串 您将发现真正发

我有一个包含字符串的javascript值:

value = "123 / 15 - Value1"
我试图在分隔符上拆分,这样我就可以得到每个数字,字符串值是它们自己的变量

我试过这个:

value=“123/15-值1”
splitVal=value.split(/[“”,\/-]/);
number1=splitVal[0];
number2=splitVal[1];
name=splitVal[2]带有

您将发现真正发生的是,除了索引0、3、6之外的所有值都是空字符串


您将发现真正发生的情况是,除索引0、3、6之外的所有值都是空字符串

您应该在拆分之前删除空格,如下所示:

splitVal= value.replace(/ /g,'').split(/[" ".,\/ -]/);

分割前应删除空格,如下所示:

splitVal= value.replace(/ /g,'').split(/[" ".,\/ -]/);

您可以使用
String.prototype.match()
和具有以下
RegExp
的解构赋值:

const value='123/15-Value1'
常量[,number1,number2,name]=值。匹配(/(\d+)*\/*(\d+)*-*(.+)/)

console.log(number1,number2,name)
您可以使用
String.prototype.match()
和具有以下
RegExp
的解构赋值:

const value='123/15-Value1'
常量[,number1,number2,name]=值。匹配(/(\d+)*\/*(\d+)*-*(.+)/)

log(number1,number2,name)
您可能更幸运,只需使用正则表达式来提取值,而不是尝试使用分隔符

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.')
}

如果只是使用正则表达式来提取值,而不是尝试使用分隔符,您可能会更幸运

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.')
}
这将有助于:

splitVal= value.split(/[" ".,\/ -]+/);
在正则表达式的末尾添加一个“+”。它告诉正则表达式必须至少出现一次(即不允许出现空字符串),这就是拆分返回空字符串(从正则表达式接收)的原因。

这将起作用:

splitVal= value.split(/[" ".,\/ -]+/);
在正则表达式的末尾添加一个“+”。它告诉正则表达式必须至少出现一次(即不允许出现空字符串),这就是拆分返回空字符串(从正则表达式接收)的原因。

您可以使用
match()
而不是
split()

var value=“123/15-值1”
var splitVal=值。匹配(/[a-z0-9]+//gi);
console.log(splitVal)
您可以使用
match()
而不是
split()

var value=“123/15-值1”
var splitVal=值。匹配(/[a-z0-9]+//gi);

console.log(splitVal)
问题是您在
(空格)和
/
处拆分,因此
123/15
变为:

[
  '123',
  // space
  '',
  // /
  '',
  // space
  '15'
]
如果您知道模式的外观,您可能希望使用而不是拆分:

value=“123/15-值1”
matchVal=value.match(/^(\d+)\s*\/\s*(\d+)\s*-\s*(.*)$/);

console.dir(matchVal)
问题是您在
(空格)和
处拆分,因此
123/15
变为:

[
  '123',
  // space
  '',
  // /
  '',
  // space
  '15'
]
如果您知道模式的外观,您可能希望使用而不是拆分:

value=“123/15-值1”
matchVal=value.match(/^(\d+)\s*\/\s*(\d+)\s*-\s*(.*)$/);

console.dir(matchVal)
代码中的正则表达式导致
[“123”、“”、“”、“15”、“”、“”、“”和“Value1”]
。您可以在
1
2
索引中看到它们是空的。您可以稍微修改正则表达式

var value=“123/15-Value1”;
var splitVal=value.split(/[\/-]/),
number1=splitVal[0]。trim(),
number2=splitVal[1],
name=splitVal[2];

log(number1,number2,name)
代码中的正则表达式导致
[“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)
您希望字符串中有什么模式?很容易为这种特殊情况硬编码解决方案,但从上下文来看,不清楚您是如何试图以通用方式解析
值的。@PatrickRoberts这种情况下的模式应该始终是数字/数字-名称,每个值和分隔符之间都有空格,但也可能是数字/数字名称
[“”]
,我想您可能想要
或此处的``(空格)。这个正则表达式将匹配这两个正则表达式中的任何一个,并且无用地重复
。另外,因为您有一个单字符类(简化)
[/]
两个数字之间的顺序
123/15
匹配三次,因此您会得到空结果。如果您在方括号后放置一个量词,
…]+
您在拆分后只会得到三个项目。您希望字符串中出现什么模式?很容易为这种特定情况硬编码解决方案,但是从上下文来看,不清楚您是如何试图以通用方式解析
值的。@PatrickRoberts这种情况下的模式应该始终是number/number-name,每个值和分隔符之间都有空格,但也可能是number/number-name
[“”]
我想您可能想要
或此处的“`”(空格)。这个正则表达式将匹配这两个正则表达式中的任何一个,并且无用地重复
。另外,因为您有一个单字符类(简化)
[/]
两个数字之间的顺序
123/15
匹配三次,因此得到的结果是空的。如果在方括号后放置一个量词
…]+
则在拆分后只会得到三个项目。虽然这会给出给定情况下的正确结果,但您仍然应该解释为什么它不会给出corr如果不替换空格,则会产生ect结果。如果输入为
“123//15-Value1”
,会发生什么情况?@vlaz这不是一个有效的输入。解析该字符串不必定义良好。@PatrickRoberts我正在催促重新考虑和/或扩展此答案。问题不是