Regex - From PHP to JS

Regex - From PHP to JS

本文关键字:to JS PHP From Regex      更新时间:2023-09-26

一位用户好心地帮助我在PHP中使用regex,但现在我意识到我也需要在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是不受欢迎的,但由于一切都是一致的,我认为这将是最好的方法。

非常感谢。

我简化了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>'));

在我看来,逐字逐句地翻译它很好。只需注意正则表达式本身的更改,即将~更改为/并删除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);