Как разбить строку при первом появлении одной из нескольких подстрок в JavaScript? - PullRequest
3 голосов
/ 23 сентября 2011

Заданные строки

s1 = "abcfoodefbarghi" 

и

s2 = "abcbardefooghi"

Как я могу разделить s1 на "abc" и "defbarghi" и s2 в "abc" и "defooghi" То есть: разбить строку на две части при первом появлении одной из строк "foo" или "bar"

Полагаю, это можно сделать с помощью s.split(/regexp/), но каким должно быть это регулярное выражение?

Ответы [ 2 ]

3 голосов
/ 23 сентября 2011

Используйте регулярное выражение следующим образом:

var match = s1.match(/^([\S\s]*?)(?:foo|bar)([\S\s]*)$/);
/* If foo or bar is found:
  match[1] contains the first part
  match[2] contains the second part */

Объяснение RE:

  • [\S\s]*? соответствует только достаточному количеству символов, чтобы соответствовать следующей части RE, которая равна
  • (foo|bar) либо "foo", либо "bar"
  • [\S\s]* соответствует оставшимся символам

Скобки вокруг части RE создают группу, чтобы можно было ссылаться на сгруппированное совпадение, тогда как (?:) создает группу без ссылок.

2 голосов
/ 23 сентября 2011
str.replace(/foo|bar/,"\x034").split("\x034")

Идея состоит в том, чтобы заменить первое вхождение специальной (невидимой) строкой, а затем разделить ее на эту строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...