在javascript中拆分一次字符串?

Sta*_*kis 73 javascript split

如何只拆分一次字符串,即1|Ceci n'est pas une pipe: | Oui解析为:["1", "Ceci n'est pas une pipe: | Oui"]

分裂的限制似乎没有帮助......

yar*_*sca 103

你想String.indexOf('|')用来获得第一次出现'|'的索引.

var i = s.indexOf('|');
var splits = [s.slice(0,i), s.slice(i+1)];
Run Code Online (Sandbox Code Playgroud)

  • 不像尼克那样"有趣",但可能效率更高.另请注意,如果有多个字符,`+ 1`实际上应该是分隔符字符串的长度. (16认同)
  • 当IndexOf返回-1时,这不能像split那样工作(例如,如果var s ='string',它将返回['strin','string'])。您将必须编写一个条件。 (4认同)
  • 为什么这个解决方案不那么“有趣”? (2认同)
  • 函数看起来不错,但当“indexOf”返回“-1”时会失败,如果在字符串“s”中找不到“|”字符,函数就会执行此操作。 (2认同)

Nic*_*ver 74

这不是一个很好的方法,但效果不错:

var string = "1|Ceci n'est pas une pipe: | Oui";
var components = string.split('|');
alert([components.shift(), components.join('|')]?);?????
Run Code Online (Sandbox Code Playgroud)

这是一个快速演示

  • 为了澄清,他将分成N个部分,然后将第一个弹出到列表中,并将其余部分连接到同一个列表中. (2认同)

Mat*_*hen 14

您可以使用:

var splits = str.match(/([^|]*)\|(.*)/);
splits.shift();
Run Code Online (Sandbox Code Playgroud)

正则表达式将字符串拆分为两个匹配的组(括号),第一个|前面的文本 以及后面的文字.然后,我们shift将结果去掉整个字符串match(splits[0]).

  • 正确地说,这可能应该在开始时就锚定。然而 javascript regexen 似乎很贪婪。 (2认同)

and*_*sit 11

ES6 语法允许采用不同的方法:

function splitOnce(s, on) {
   [first, ...rest] = s.split(on)
   return [first, rest.length > 0? rest.join(on) : null]
}
Run Code Online (Sandbox Code Playgroud)

它还|通过返回 null 而不是空字符串来处理没有 a 的字符串的可能性,这是更明确的。

splitOnce("1|Ceci n'est pas une pipe: | Oui", "|")
>>> ["1", "Ceci n'est pas une pipe: | Oui"]

splitOnce("Celui-ci n'a pas de pipe symbol!", "|")
>>> ["Celui-ci n'a pas de pipe symbol!", null]
Run Code Online (Sandbox Code Playgroud)

管道?C'est null!

我添加了这个回复主要是为了我可以在管道符号上打个双关语,但也为了炫耀 es6 语法 - 令人惊讶的是有多少人仍然不使用它......


Has*_*sek 6

一个班轮和imo,更简单:

var str = 'I | am super | cool | yea!';
str.split('|').slice(1).join('|');
Run Code Online (Sandbox Code Playgroud)

这回归"am super | cool | yea!"

  • 这不是我们所要求的,他们也在寻找丢失的第一部分。 (6认同)