拆分string一次在JavaScript?
我怎样才能分割一个string只有一次,即使1|Ceci n'est pas une pipe: | Oui
1|Ceci n'est pas une pipe: | Oui
parsing为: ["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 [];