Как я могу разделить строку только однажды, т.е. сделать 1|Ceci n'est pas une pipe: | Oui
синтаксический анализ к: ["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('|')]);
Попробуйте следующее:
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 splits = str.split('|');
splits.splice(1, splits.length - 1, splits.slice(1).join('|'));
Вы можете использовать String.indexOf ('|')
, чтобы получить индекс первого появления '|'.
var i = s.indexOf('|');
var splits = [s.slice(0,i), s.slice(i+1)];
Вы можете использовать:
var splits = str.match(/([^|]*)\|(.*)/);
splits.shift();
Регулярное выражение разбивает строку на две совпадающие группы (в скобках), текст предшествует первой | и текст после. Затем мы сдвигаем
результат, чтобы избавиться от совпадения всей строки ( разбивает [0]
).
Альтернативный, короткий подход, помимо тех, что есть в других местах, заключается в использовании ограничения replace ()
в ваших интересах.
var str = "1|Ceci n'est pas une pipe: | Oui";
str.replace("|", "aUniquePhraseToSaySplitMe").split("aUniquePhraseToSaySplitMe");
Как отмечает @sreservoir в комментариях, уникальная фраза должна быть действительно уникальной - ее не может быть в источнике, в котором вы запускаете это разделение, иначе вы разделите строку на большее количество частей, чем вы хотите. Непечатаемый символ, по его словам, может иметь место, если вы запускаете его против пользовательского ввода (т.е. набираете в браузере).
используйте функцию регулярных выражений javascript и возьмите первое попавшееся выражение.
RE, вероятно, будет выглядеть как /^([^|]*)\|/
.
на самом деле, /[^|]*/
нужен только если вы подтвердили, что строка отформатирована таким образом из-за жадности javascript regex.