在javascript中拆分字符串一次?

IT技术 javascript split
2021-03-13 15:05:41

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

split 的限制似乎没有帮助......

6个回答

您想用它String.indexOf('|')来获取第一次出现“|”的索引。

var i = s.indexOf('|');
var splits = [s.slice(0,i), s.slice(i+1)];
对于那些想知道的人,要使用 2 个或更多块执行此操作,您可以在循环中使用 indexOf 或: var i = s.split('|',2).join('|').length;//2nd index var splits = [s.slice(0,i).split('|'), s.slice(i+1)];
2021-04-16 15:05:41
为什么这个解决方案不那么“有趣”?
2021-04-23 15:05:41
不像尼克那样“有趣”,但可能更有效率。另请注意+1,如果超过一个字符,则实际上应该是分隔符字符串的长度。
2021-04-28 15:05:41
Functioin 看起来不错,但在indexOf返回时失败-1,如果|在 string 中找不到字符,它就会失败s
2021-05-04 15:05:41
当 IndexOf 返回 -1 时,这不像 split 那样工作(例如,如果 var s='string' 它将返回 ['strin','string'])。你必须写一个条件。
2021-05-08 15:05:41

这不是一个很好的方法,但工作效率不错:

var string = "1|Ceci n'est pas une pipe: | Oui";
var components = string.split('|');
alert([components.shift(), components.join('|')]​);​​​​​

这是它的快速演示

我认为这实际上比正则表达式要好。选择正确,谢谢!
2021-04-20 15:05:41
澄清一下,他分成 N 部分,然后将第一个弹出到列表中,并将其余部分加入到同一个列表中。
2021-04-27 15:05:41
对于那些想知道如何使用 2 个或更多夹头执行此操作的人,您可以在循环中使用 shift 或: components.splice(0,2).slice(0,2)
2021-05-01 15:05:41
如果你想从字符串中取出 k 个标记而不是 1,除了使用 components.splice(0,k) 而不是 components.shift() 之外,执行与上面相同的操作。
2021-05-07 15:05:41

您可以使用:

var splits = str.match(/([^|]*)\|(.*)/);
splits.shift();

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

正确地,这可能应该在开始时锚定。然而 javascript regexen 似乎是贪婪的。
2021-04-28 15:05:41

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

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

它还|通过返回 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]

管道?C'est null!

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

一个班轮和海事组织,更简单:

var str = 'I | am super | cool | yea!';
str.split('|').slice(1).join('|');

这将返回“我超级 | 酷 | 是的!”

这不是我们所要求的,他们也在寻找丢失的第一部分。
2021-04-20 15:05:41