【问题标题】:Regex - From PHP to JS正则表达式 - 从 PHP 到 JS
【发布时间】:2015-10-27 19:49:57
【问题描述】:

一位用户很友善地帮助我在 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 是不受欢迎的,但由于一切都是一致的,我认为这将是最好的方法。

非常感谢。

【问题讨论】:

  • 那么你的问题是什么?
  • 你尝试过什么 Javascript?
  • @Kyll 看起来只是 “如何让这段代码在 JavaScript 中做同样的事情”
  • 啊。然后,Stack Overflow 是一个问答网站,而不是代码翻译服务。尝试先自己翻译代码,遇到困难再找我们,一定要告诉我们what you have tried

标签: javascript php regex markdown


【解决方案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>'));

【讨论】:

  • 非常感谢。我选择了@Zsw 的回答,因为它让我可以让事情变得更严格,但如果我需要更宽松一点,我可能会采用你的方法。谢谢。
【解决方案2】:

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);

【讨论】:

  • 非常感谢。这表明我有多接近。我没有删除's'修饰符。再次感谢。
  • 您不能在 JavaScript 中使用 /s修饰符。将所有点替换为[\s\S]
  • @stribizhev 明白了。谢谢。
  • 另外,preg_replace执行全局搜索和替换(在JS中,你需要/g)。但是,我怀疑您是否需要在此处进行全局搜索。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-13
  • 2014-04-23
  • 2012-07-04
  • 1970-01-01
  • 1970-01-01
  • 2013-03-16
相关资源
最近更新 更多