【问题标题】:How to Grab Selected str.replace Value From Regex in JS如何在 JS 中从正则表达式中获取选定的 str.replace 值
【发布时间】:2015-07-07 21:56:24
【问题描述】:

好的,我明白标题可能有点令人困惑,让我详细说明一下。 所以首先我正在制作一个 BBCode 输入部分。然后它将代码从 BBCode 传输到 HTML。现在的问题是我遇到了最小的问题。让我在继续之前发布我的代码:

var newer = $('#my_textarea').val().replace(/\[b\]/gi, '<b>');

现在让我这么说吧,它用&lt;b&gt; 标签正确地替换了[b] 标签。我的问题是我不知道如何对所有标签执行此操作。我尝试过使用以下代码来缩短代码:

var newer = $('#my_textarea').val().replace(/\[(?:b|u|i)\]/gi, '<???>');

然后它将用正确的 HTML 标签替换所有标签(粗体、下划线和斜体)。但是我该怎么做呢?如何将 HTML 标记替换为找到的 BBCode 标记?我的意思是正则表达式(?:b|u|i) 的这一部分,它选择三个字母中的任何一个,我怎么能将同一个字母添加到 HTML 标记中?你明白我的问题是什么吗? :) 请帮忙,谢谢!!

【问题讨论】:

  • 一种方法是为所有 bb 标签创建数组,遍历数组以创建一个正则表达式并为每个标签替换

标签: javascript jquery html regex


【解决方案1】:

使用$2 获取第二个选定组

var newer = $('#my_textarea').val().replace(/(\[(b|u|i)\])/gi, '<$2>');

理解和创建 RegEx 的好网站:https://regex101.com/

要同时捕获 [b],[u],[i][\b],[\u],[\i],请使用以下命令:

var newer = $('#my_textarea').val().replace(/(\[((\/?)(b|u|i))\])/gi, '<$2>');

【讨论】:

  • 非常感谢! :) 一个问题,为什么是 2 美元而不是 1 美元?
  • 如果你在我给你的网站中输入/(\[(b|u|i)\])/gi,你会看到第一组 $1 是我们要替换的表达式,第二组是括号内的字母。
  • 关于如何将其写入一个表达式的任何想法?否则这将是一个额外的行:(也谢谢你,第一部分工作得很好!
  • 对不起! xD 我忘了添加我的问题,哈哈。你知道我如何在一个表达式中添加 [tag] 和 [/tag] 吗?所以也有一个结束标签。
  • 也更新了我的答案:)
【解决方案2】:

下面的正则表达式会将 BBCode 转换为 HTML:

result = subject.replace(/\[(b|i|p)\](.*?)\[\/(b|i|p)\]/g, "<$1>$2</$3>");

您需要添加更多标签,但您明白了。


演示

http://jsfiddle.net/tuga/sp5597aj/1/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 2016-12-16
    • 2013-04-06
    • 1970-01-01
    • 2021-06-07
    相关资源
    最近更新 更多