Разделить строку на массив между символами to?

#javascript #arrays #regex #string

#javascript #массивы #регулярное выражение #строка

Вопрос:

Итак, я пытаюсь разделить строку, которая у меня есть, каким-то нерегулярным способом. Я пытался что-то сделать с регулярными выражениями, но я не настолько увлекаюсь регулярными выражениями, чтобы изобретать что-то подобное.

В принципе, у меня есть строка, которая выглядит так:

 var links = "<a>4</a><b><c><d><e><f>";
  

И я хочу использовать метод .split() js для получения их в массиве следующим образом:

 ["<a>4</a>", "<b>", "<c>", "<d>", "<e>", "<f>"]
  

Итак, очевидно, что мне нужно разделить их на >< символы, но если я сделаю это:

 links.split("><");
  

Они будут разделены так, как я хочу, но я потеряю > < знаки and . пример:

 ["<a>4</a", "b", "c", "d", "e", "f>"]
  

Это не очень хорошее решение для меня.

Итак, в основном мой вопрос таков: возможно ли сделать какое-то решение с регулярным выражением или чем-то еще, чтобы получить результат массива, как я себе представлял?

Ответ №1:

Быстрым и чистым методом было бы использовать match вместо split :

 var matches = links.match(/<. ?>(?=<|$)/g)
  

Для вашей строки это дает

 ["<a>4</a>", "<b>", "<c>", "<d>", "<e>", "<f>"]
  

Будьте осторожны, что использование регулярных выражений с нерегулярным языком, таким как HTML, опасно. Часто это нормально для простых вещей, но также ограничено, и вы можете столкнуться с неожиданностями, например, если вы хотите применить его к вложенным элементам.

Комментарии:

1. Это, на мой взгляд, лучшее решение. Я просто не использовал .match() так много, и я не думал об этом. Спасибо!

Ответ №2:

Быстрым и грязным методом было бы добавить разделитель между >< , с регулярным replace выражением, а затем разделить на этот разделитель:

 var links = "<a>4</a><b><c><d><e><f>";
links.replace(/></g, '>|<').split('|');
  

Результат:

 ["<a>4</a>", "<b>", "<c>", "<d>", "<e>", "<f>"]
  

Просто убедитесь, что выбранный вами разделитель не встречается в самой строке.
(Вы можете использовать более длинные строки в качестве разделителей, например: "|-|" .)

Комментарии:

1. Да, это на самом деле быстрое и простое решение, которое не так сложно, но я просто не додумался до этого! Точка определенно!

2. Да, это работает и просто для понимания, но решение @dystroy, вероятно, более эффективно 😉 Спасибо за 1