У меня есть следующий фрагмент кода:
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, вышедшем выше).
Я имею в виду, для меня показывают следующие результаты:
[...]
штифтик
Питт
/Леонардо
ДиКаприо
[...]
И я хочу и нужно это:
Брэд Питт
Леонардо Дикаприо
Без косых черт, без разделенных имен/фамилий.
Для этого вам не нужно регулярное выражение. Метод 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/>"));
Разделение, как следует из названия, разбивает строку на массив с помощью /
в качестве разделителя.
Замените ваше регулярное выражение так:
/([^\/]+)\/*/g
Вместо использования (\w+)
для слов (которые не содержат пробелов) вы хотите [^\/]+
означать что угодно, кроме косой черты.
Это регулярное выражение работает отлично:
$('.colors .recipe').html(colors.replace(/(\\)?\//g, '<em>$1</em><br>'));
.split()
если вам нужно больше снисхождения. Например:.split(/\s*\/\s*/)
.