在javascript中拆分字符串一次?

在javascript中拆分字符串一次?,javascript,split,Javascript,Split,如何仅拆分一次字符串,即使1 | Ceci n'est pas unie pipe:| Oui解析为:[“1”,“Ceci n'est pas unie pipe:| Oui”] 拆分中的限制似乎没有帮助…您可以使用: var splits = str.match(/([^|]*)\|(.*)/); splits.shift(); 正则表达式将字符串分成两个匹配组(括号内),第一个|前面的文本和后面的文本。然后,我们将返回结果以消除整个字符串匹配(拆分[0])。您可以使用: var split

如何仅拆分一次字符串,即使
1 | Ceci n'est pas unie pipe:| Oui
解析为:
[“1”,“Ceci n'est pas unie pipe:| Oui”]

拆分中的限制似乎没有帮助…

您可以使用:

var splits = str.match(/([^|]*)\|(.*)/);
splits.shift();
正则表达式将字符串分成两个匹配组(括号内),第一个|前面的文本和后面的文本。然后,我们将返回结果以消除整个字符串匹配(
拆分[0]
)。

您可以使用:

var splits = str.match(/([^|]*)\|(.*)/);
splits.shift();
正则表达式将字符串分成两个匹配组(括号内),第一个|前面的文本和后面的文本。然后,我们将返回结果以消除整个字符串匹配(
拆分[0]
)。

尝试以下操作:

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", '|');
试试这个:

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

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

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

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

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

使用javascript正则表达式功能并获取第一个捕获的表达式

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


实际上,如果由于javascript正则表达式的贪婪性,验证了字符串的格式,则只需使用
/[^ |]*/

使用javascript正则表达式功能并获取第一个捕获的表达式

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


实际上,由于javascript正则表达式的贪婪性,如果验证字符串的格式是这样的,您只需要
/[^ |]*/

您需要使用
string.indexOf(“|”)
来获取第一次出现的“|”的索引。

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

您需要使用
String.indexOf(“|”)
获取第一次出现的“|”的索引。

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

与目前大多数答案一样邪恶:

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

与目前大多数答案一样邪恶:

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

除了其他地方的商品之外,另一种简短的方法是使用
replace()

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

正如@sreservoir在评论中指出的,唯一的短语必须是真正唯一的——它不能在您正在运行此拆分的源代码中,否则您会将字符串拆分为比您想要的更多的片段。正如他所说的,如果您是针对用户输入(即在浏览器中键入)运行此操作,则可能会出现无法打印的字符。

除了其他地方的商品字符外,另一种简短的方法是使用
replace()
的限制

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

正如@sreservoir在评论中指出的,唯一的短语必须是真正唯一的——它不能在您正在运行此拆分的源代码中,否则您会将字符串拆分为比您想要的更多的片段。正如他所说,如果您是针对用户输入(即,在浏览器中键入)运行此操作,则可能会出现无法打印的字符。

一行和imo,更简单:

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

这将返回“am super | cool | yea!”

一艘班轮和imo,更简单:

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

如果字符串不包含分隔符,则返回“am super | cool | yes!”

。NickCraver的解决方案仍将返回两个元素的数组,第二个元素是空字符串。我更喜欢与split行为相匹配的行为。也就是说,如果输入字符串不包含分隔符,则只返回一个包含单个元素的数组

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"]

如果字符串不包含分隔符@NickCraver,则解决方案仍将返回两个元素的数组,第二个元素是空字符串。我更喜欢与split行为相匹配的行为。也就是说,如果输入字符串不包含分隔符,则只返回一个包含单个元素的数组

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"]

这个稍微长一点,但我认为它应该:

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));

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

if(limit < 1) return [];
if(limit<1)返回[];

这个稍微长一点,但我认为它的工作原理应该是:

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));

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

if(limit < 1) return [];
if(limit<1)返回[];

ES6语法允许不同的方法:

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语法——令人惊讶的是,有多少人仍然没有使用它……

es6语法允许不同的方法:

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语法-令人惊讶的是,有多少人仍然不使用它…

如果你想使用“管道”,那么
reduce
是你的朋友

const separator='|'
jsonNode.split(分隔符)
.减少((以前、当前、索引)=>
{
如果(索引<2)上一次推送(当前)
else-previous[1]+=`${separator}${current}`
返回上一个
}, [])
.map((项:字符串)=>(项.trim())
.filter((项目:字符串)=>(项目!='')
如果你想使用“管道”
reduce
是你的朋友

const separator='|'
jsonNode.split(分隔符)
.减少((以前、当前、索引)=>
{
如果(索引<2)上一次推送(当前)
else-previous[1]+=`${separator}${current}`
返回上一个
}, [])
.map((项:字符串)=>(项.trim())
.filter((项目:字符串)=>(项目!='')
更有效的方法:

const str=“1 | Ceci n'est pas une pipe:| Oui”
const[head]=str.split(“|”,1);
常量结果=[head,str.substr(head.length+1)]
控制台日志(结果)更有效的方法:

const str=“1 | Ceci n'est pas une pipe:| Oui”
C