JavaScript — Regex — От PHP до JS

Пользователь был достаточно любезен, чтобы помочь мне с моим регулярным выражением в PHP, но теперь я понимаю, что мне это нужно и в JS. Я тратил сумасшедшее количество времени на тестирование / эксперименты, но безуспешно.

В JS я хотел бы включить это:

[data-user="12345-6789" data-userId="3456-789"]John Smith[/] ...Blablabla some other text... [data-user="4567-891011" data-userId="5678-9101112"]Foo Bar[/]

В это:

<span data-user="12345-6789" data-userId="3456-789">John Smith</span> ...Blablabla some other text... <span data-user="4567-891011" data-userId="5678-9101112">Foo Bar</span>

Вот мое регулярное выражение PHP, которое прекрасно работает:

$regex = '~\[(data-user="[\d-]+")\s+(data-userId="[\d-]+")\]\s*(.+?)\s*\[\/\]\s*(.*)~is';

while (preg_match($regex, $string)) {
$string = preg_replace($regex, "&lt;span $1 $2&gt;$3&lt;/span&gt;$4", trim(strip_tags($string)));
}

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

Большое спасибо.

1

Решение

Мне кажется, что перевод его дословно работает просто отлично. Просто нужно учитывать изменения в самом регулярном выражении, а именно: изменение ~ в / и удаление s модификатор.

var regex = /\[(data-user="[\d-]+")\s+(data-userId="[\d-]+")\]\s*(.+?)\s*\[\/\]\s*(.*)/i;
var str = '[data-user="12345-6789" data-userId="3456-789"]John Smith[/] ...Blablabla some other text... [data-user="4567-891011" data-userId="5678-9101112"]Foo Bar[/]';
var html = str;

while (regex.test(html)) {
html = html.replace(regex, '&lt;span $1 $2&gt;$3&lt;/span&gt;$4');
}
console.log(html);
1

Другие решения

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

В JavaScript вы можете просто использовать String.prototype.replace() как он принимает RegEx.

var string = '[data-user="12345-6789" data-userId="3456-789"]John Smith[/] ...Blablabla some other text... [data-user="4567-891011" data-userId="5678-9101112"]Foo Bar[/]'

var regex = /\[([^\]]*)\]\s*([^\[]*)\s*\[\/\]/ig;

console.log(string.replace(regex, '<span $1>$2</span>'));
2

По вопросам рекламы [email protected]