如何仅将字符串拆分一次,即使得1 | Ceci n'est pas une pipe: | Oui
解析为:["1","Ceci n'est pas une pipe: | Oui"]
?
使用split中的limit似乎无法实现...
如何仅将字符串拆分一次,即使得1 | Ceci n'est pas une pipe: | Oui
解析为:["1","Ceci n'est pas une pipe: | Oui"]
?
使用split中的limit似乎无法实现...
String.indexOf('|')
来获取第一个'|'出现的位置索引。var i = s.indexOf('|');
var splits = [s.slice(0,i), s.slice(i+1)];
+1
实际上应该是分隔符字符串的长度。 - devios1var i = s.split('|',2).join('|').length;//2nd index
var splits = [s.slice(0,i).split('|'), s.slice(i+1)];
- UltimaterindexOf
在字符串s
中找不到|
字符,它会返回-1
,从而导致函数失败。 - aahoogendoorn这并不是一个优美的方法,但效率还不错:
var string = "1|Ceci n'est pas une pipe: | Oui";
var components = string.split('|');
alert([components.shift(), components.join('|')]);
components.splice(0,2).slice(0,2)
。 - UltimaterES6语法允许采用不同的方法:
function splitOnce(s, on) {
[first, ...rest] = s.split(on)
return [first, rest.length > 0? rest.join(on) : null]
}
如果字符串中没有|
,则返回null而不是空字符串,这样更明确。
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]
没有管道?那就是空的!
我添加了这个回复主要是为了制造一个关于管道符号的双关语,同时展示es6语法 - 多少人仍然不使用它真是太神奇了...
您可以使用:
var splits = str.match(/([^|]*)\|(.*)/);
splits.shift();
正则表达式将字符串分成两个匹配组(在括号内),第一个 | 前面的文本和后面的文本。然后,我们使用 shift
函数来去掉整个字符串匹配项(splits[0]
)。string.substring()
和string.indexOf('|')
可以以光速完成此操作。 - maxkoryukov一句话总结,我认为更简单:
var str = 'I | am super | cool | yea!';
str.split('|').slice(1).join('|');
var splitOnce = function(str, delim) {
var components = str.split(delim);
var result = [components.shift()];
if(components.length) {
result.push(components.join(delim));
}
return result;
};
splitOnce("a b c d", " "); // ["a", "b c d"]
splitOnce("a", " "); // ["a"]
更有效的方法:
const str = "1|Ceci n'est pas une pipe: | Oui"
const [head] = str.split('|', 1);
const result = [head, str.substr(head.length + 1)]
console.log(result);
您可以将字符串拆分为数组,然后将第一个元素以外的所有元素连接成一个字符串。
const text = 'a=b=c=d'
const [key, ...values] = text.split('=')
const value = values.join('=')
console.log(key, value)
您还可以使用匹配所有内容的正则表达式进行拆分
const str = "one | two | three | four"
const [first, second] = str.split(/\|(.*)/s) // [ 'one ', ' two | three | four', '' ]
s
(请参见文档),否则它将一直分割到第一个换行符。试试这个:
function splitOnce(input, splitBy) {
var fullSplit = input.split(splitBy);
var retVal = [];
retVal.push( fullSplit.shift() );
retVal.push( fullSplit.join( splitBy ) );
return retVal;
}
var whatever = splitOnce("1|Ceci n'est pas une pipe: | Oui", '|');
.split
的解决方案比`s.indexOf(...); s.slice(); /* OR: s.substring() */差得多。在Chrome和NodeJS中,“差得多”意味着它们慢了约90%。 - maxkoryukov