正则表达式 - 从 PHP 到 JS
Regex - From PHP to JS
一位用户非常友好地帮助我解决了 PHP 中的正则表达式问题,但现在我意识到我在 JS 中也需要它。我花了很多时间 testing/experimenting,但没有成功。
在 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, "<span ></span>", trim(strip_tags($string)));
}
P.S。我完全知道用正则表达式解析 HTML 是不受欢迎的,但由于一切都是一致的,我认为这将是最好的方法。
非常感谢。
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, '<span ></span>');
}
console.log(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 ></span>'));
一位用户非常友好地帮助我解决了 PHP 中的正则表达式问题,但现在我意识到我在 JS 中也需要它。我花了很多时间 testing/experimenting,但没有成功。
在 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, "<span ></span>", trim(strip_tags($string)));
}
P.S。我完全知道用正则表达式解析 HTML 是不受欢迎的,但由于一切都是一致的,我认为这将是最好的方法。
非常感谢。
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, '<span ></span>');
}
console.log(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 ></span>'));