Строка разделения однажды в JavaScript?

Как я могу разделить строку только однажды, т.е. сделать 1|Ceci n'est pas une pipe: | Oui синтаксический анализ к: ["1", "Ceci n'est pas une pipe: | Oui"]?

Предел в разделении, кажется, не помогает...

73
задан Joel Coehoorn 21 May 2010 в 00:00
поделиться

7 ответов

Это не очень хороший подход, но он работает с приличной эффективностью:

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

Вот его быстрая демонстрация

74
ответ дан 24 November 2019 в 12:09
поделиться

Попробуйте следующее:

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", '|');
3
ответ дан 24 November 2019 в 12:09
поделиться

Такие же злые, как и большинство ответов на данный момент:

var splits = str.split('|');
splits.splice(1, splits.length - 1, splits.slice(1).join('|'));
1
ответ дан 24 November 2019 в 12:09
поделиться

Вы можете использовать String.indexOf ('|') , чтобы получить индекс первого появления '|'.

var i = s.indexOf('|');
var splits = [s.slice(0,i), s.slice(i+1)];
103
ответ дан 24 November 2019 в 12:09
поделиться

Вы можете использовать:

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

Регулярное выражение разбивает строку на две совпадающие группы (в скобках), текст предшествует первой | и текст после. Затем мы сдвигаем результат, чтобы избавиться от совпадения всей строки ( разбивает [0] ).

14
ответ дан 24 November 2019 в 12:09
поделиться

Альтернативный, короткий подход, помимо тех, что есть в других местах, заключается в использовании ограничения replace () в ваших интересах.

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

Как отмечает @sreservoir в комментариях, уникальная фраза должна быть действительно уникальной - ее не может быть в источнике, в котором вы запускаете это разделение, иначе вы разделите строку на большее количество частей, чем вы хотите. Непечатаемый символ, по его словам, может иметь место, если вы запускаете его против пользовательского ввода (т.е. набираете в браузере).

0
ответ дан 24 November 2019 в 12:09
поделиться

используйте функцию регулярных выражений javascript и возьмите первое попавшееся выражение.

RE, вероятно, будет выглядеть как /^([^|]*)\|/.

на самом деле, /[^|]*/ нужен только если вы подтвердили, что строка отформатирована таким образом из-за жадности javascript regex.

-1
ответ дан 24 November 2019 в 12:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: