正则表达式 - 从PHP到JS

时间:2015-10-27 19:49:57

标签: javascript php regex markdown

用户非常友好地帮助我使用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)));
}

P.S。我完全清楚用正则表达式解析HTML是不受欢迎的,但由于一切都是一致的,我认为这将是最好的方法。

非常感谢。

2 个答案:

答案 0 :(得分:2)

我简化了RegEx并使其不太硬编码,允许您在标签内部也有其他属性。

在JavaScript中,您可以使用String.prototype.replace(),因为它接受RegEx。

&#13;
&#13;
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>'));
&#13;
&#13;
&#13;

答案 1 :(得分:1)

It looks to me like translating it verbatim works just fine.只需要记住正则表达式本身的变化,即将~更改为/并删除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);
相关问题