#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