拆分string一次在JavaScript?

我怎样才能分割一个string只有一次,即使1|Ceci n'est pas une pipe: | Oui 1|Ceci n'est pas une pipe: | Ouiparsing为: ["1", "Ceci n'est pas une pipe: | Oui"]

分裂限制似乎没有帮助…

这不是一个漂亮的方法,但工作效率很高:

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

这是一个快速的演示

你想要使用String.indexOf('|')来获得第一个“|”的索引。

 var i = s.indexOf('|'); var splits = [s.slice(0,i), s.slice(i+1)]; 

您可以使用:

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

正则expression式将string拆分成两个匹配的组(括号),即第一个|之前的文本 和之后的文字。 然后,我们shift结果来摆脱整个string匹配( splits[0] )。

一个class轮和IMO,更简单:

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

这将返回“很好|很好!

尝试这个:

 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", '|'); 

如果string不包含分隔符@ NickCraver的解决scheme仍然会返回两个元素的数组,第二个是一个空string。 我更喜欢这种行为来匹配分裂。 也就是说,如果inputstring不包含分隔符,则只返回一个包含单个元素的数组。

 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("abcd", " "); // ["a", "bcd"] splitOnce("a", " "); // ["a"] 

就像迄今为止大部分答案一样邪恶:

 var splits = str.split('|'); splits.splice(1, splits.length - 1, splits.slice(1).join('|')); 

使用JavaScript正则expression式function并采取第一个捕获的expression式。

RE可能看起来像/^([^|]*)\|/

实际上,你只需要/[^|]*/如果你确认string是以这种方式格式化的,由于JavaScript正则expression式的贪婪。

除了其他地方的货物之外,另一种简短的方法是使用replace()来限制你的优势。

 var str = "1|Ceci n'est pas une pipe: | Oui"; str.replace("|", "aUniquePhraseToSaySplitMe").split("aUniquePhraseToSaySplitMe"); 

正如@sreservoir在评论中指出的那样,这个独特的短语必须是真正独特的 – 它不能在源头上运行,或者将string拆分成比你想要的更多的片段。 一个不可打印的字符,正如他所说的,如果你对用户input(即在浏览器中input)执行这个操作,可能会这样做。

这个稍微长一些,但它的工作原理就像我认为限制应该:

 function split_limit(inString, separator, limit){ var ary = inString.split(separator); var aryOut = ary.slice(0, limit - 1); if(ary[limit - 1]){ aryOut.push(ary.slice(limit - 1).join(separator)); } return aryOut; } console.log(split_limit("1|Ceci n'est pas une pipe: | Oui","|", 1)); console.log(split_limit("1|Ceci n'est pas une pipe: | Oui","|", 2)); console.log(split_limit("1|Ceci n'est pas une pipe: | Oui","|", 3)); console.log(split_limit("1|Ceci n'est pas une pipe: | Oui","|", 7)); 

https://jsfiddle.net/2gyxuo2j/

零的限制返回有趣的结果,但是以效率的名义,我没有把它检查。 如果需要,可以将其添加为函数的第一行:

 if(limit < 1) return [];