Получение слов, разделенных «/» с помощью регулярных выражений

0

У меня есть следующий фрагмент кода:

HTML

<div class="colors">
    <h1>Colors:</h1>

    <div class="recipe"></div>
</div>

<div class="numbers">
    <h1>Numbers:</h1>

    <div class="recipe"></div>
</div>

<div class="people">
    <h1>People:</h1>

    <div class="recipe"></div>
</div>

JavaScript

var colors = 'yellow / black / purple',
    numbers = '5 / 15 / 25',
    people = 'Brad Pitt / Leonardo DiCaprio / Anne Hathaway';

$('.colors .recipe').html(colors.replace(/(\w+)\/*/g, '<em>$1</em><br>'));

$('.numbers .recipe').html(numbers.replace(/(\w+)\/*/g, '<em>$1</em><br>'));

$('.people .recipe').html(people.replace(/(\w+)\/*/g, '<em>$1</em><br>'));

Отъезд в jsFiddle.

Я плохо разбираюсь в регулярном выражении, затем получаю неожиданные результаты при рендеринге разделенных значений в их соответствующих рецептах (вы можете увидеть больше о jsFiddle, вышедшем выше).

Я имею в виду, для меня показывают следующие результаты:

[...]

штифтик

Питт

/Леонардо

ДиКаприо

[...]

И я хочу и нужно это:

Брэд Питт

Леонардо Дикаприо

Без косых черт, без разделенных имен/фамилий.

Теги:

3 ответа

5
Лучший ответ

Для этого вам не нужно регулярное выражение. Метод split может выполнять работу:

var colors = 'yellow / black / purple',
    numbers = '5 / 15 / 25',
    people = 'Brad Pitt / Leonardo DiCaprio / Anne Hathaway';

function wrapEm(e) {
    return "<em>" + e + "</em>";
}

people.split(" / ").join("<br/>");

$('.colors .recipe').html(colors.split(" / ").map(wrapEm).join("<br/>"));
$('.numbers .recipe').html(numbers.split(" / ").map(wrapEm).join("<br/>"));
$('.people .recipe').html(people.split(" / ").map(wrapEm).join("<br/>"));

Разделение, как следует из названия, разбивает строку на массив с помощью / в качестве разделителя.

  • 0
    Вы все еще можете использовать регулярные выражения с .split() если вам нужно больше снисхождения. Например: .split(/\s*\/\s*/) .
  • 0
    Да, определенно не идите чрезмерно инженерно. Полностью соскользнул с ума при ответе.
Показать ещё 7 комментариев
0

Замените ваше регулярное выражение так:

/([^\/]+)\/*/g

Вместо использования (\w+) для слов (которые не содержат пробелов) вы хотите [^\/]+ означать что угодно, кроме косой черты.

0

Это регулярное выражение работает отлично:

 $('.colors .recipe').html(colors.replace(/(\\)?\//g, '<em>$1</em><br>'));

Ещё вопросы

Сообщество Overcoder
Наверх
Меню