【问题标题】:RegEX to replace <div /foo> with </div>RegEX 用 </div> 替换 <div /foo>
【发布时间】:2014-04-04 15:16:49
【问题描述】:

我是使用 RegEX 的新手,我真的需要一些帮助。

我正在做一些字符串替换,我目前得到了输出

<div /foo> 

代替

</div>

str = "[foo][/foo]";

使用的正则表达式:

str= str.replace(/\[/g, '<div ').replace(/\]/g, '>');

想要的输出:

<div foo></div>

有人可以帮我以正确的方式替换字符串吗?

非常感谢!

【问题讨论】:

  • 在没有上下文的情况下无法提供帮助
  • [foo][/foo] 的预期输出是什么?
  • 还添加了所需的输出。

标签: javascript jquery regex regex-negation


【解决方案1】:

您的问题内容不多,所以我只是发布了一些可以完成工作的内容。请注意,这假设您不关心开始标签之后的任何内容,它只保留标签的名称并将其替换为&lt;/tagname&gt;

var str = "<div /foo>";
var replaced = str.replace(/<(\w+).*/, '</$1>')
// "</div>"

【讨论】:

  • 这不能回答问题。
  • @M42 怎么样?我错过了什么?它用“
    ”替换“
    ”不是吗?
  • 是的,但 OP 想用 &lt;div foo&gt;&lt;/div&gt; 替换 [foo][/foo]
  • 如果想要的输出是&lt;div foo&gt;&lt;/div&gt;,那么试试这个var str = "&lt;div /foo&gt;"; var replaced = str.replace(/&lt;(\w+) \/(\w+)&gt;?/, function (match, $1, $2) {console.log('d', arguments); return '&lt;'+$1+' '+$2+'&gt;&lt;/'+$1+'&gt;';});
  • @M42 他改变了他的问题。当我回答时,该内容不存在,只有标题是任何指示。 &lt;/div&gt; 下方的所有内容均已添加,从 str = "[foo][/foo]"; 开始。
【解决方案2】:

这个可以满足你的需要:

\[([^\]]+)\](.*?)\[/\1\]

替换为:&lt;div $1&gt;$2&lt;/div&gt;

PS:如果使用 JavaScript 的正则表达式文字,请不要忘记转义 /,即:

/\[([^\]]+)\](.*?)\[\/\1\]/g

【讨论】:

  • 非常感谢!另外,感谢您的演示和可视化!
【解决方案3】:

怎么样:

str= str.replace(/\[(.+?)\]\[\/\1\]/g, '<div $1></div>');

【讨论】:

    【解决方案4】:

    你也可以这样做。

    var  str = "[foo][/foo]";
    //replace <, > with [, ]
    var signReplace = str.replace(/\[/g, '<').replace(/\]/g, '>'); 
    tagReplace = signReplace.replace(/foo/g, 'div'); //replace div with foo
    

    【讨论】:

      猜你喜欢
      • 2013-02-24
      • 2011-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-04
      相关资源
      最近更新 更多