在java中组合两个正则表达式

时间:2015-07-02 07:45:45

标签: html regex replace

我有一些这样的文字:

[image]bdaypic.jpg[caption]My pic[/caption][/image]

我应该输出:

<figure><img src='bdaypic.jpg'/><figcaption>My pic</figcaption></figure>

我使用以下代码:

string = string.replaceAll("\\[image\\](.*?)\\[\\/image\\]", "<figure><img src='$1'/></figure>");
string = string.replaceAll("\\[caption\\](.*?)\\[\\/caption\\]", "<figcaption>$1</figcaption>");

但我的输出为

<figure><img src='bdaypic/><figcaption>My pic</figcaption>'</figure>

[caption] [/ caption]是可选的。如果它在那里只有它应该被替换为tag。

3 个答案:

答案 0 :(得分:1)

问题似乎在于第一次更换。您正在捕获[image]标记之间的所有内容,并将其替换为内容的引用版本。我合并了你的两个表达式并得到了你的意思:

        String string = "[image]bdaypic.jpg[caption]My pic[/caption][/image]";
        string=string.replaceAll("\\[image\\](.*?)\\[caption\\](.*?)\\[\\/caption\\]\\[\\/image\\]","<figure><img src='$1'/><figcaption>$2</figcaption></figure>");
        System.out.println(string);

收率:

<figure><img src='bdaypic.jpg'/><figcaption>My pic</figcaption></figure>

答案 1 :(得分:0)

很多疯狂的逃脱但你可以使用:

str = str.replaceAll("\\[(image)\\]([^\\[]+)\\[(caption)\\]([^\\[]+)\\[/\\3\\]\\[/\\1\\]", 
             "<figure><img src='$2'/><figcaption>$4</figcaption></figure>");

RegEx Demo

答案 2 :(得分:0)

我已经创建了一个能够做到这一点的功能:

                   function showreplaced(){
                  var str="[image]bdaypic.jpg[caption]My pic[/caption][/image]";
                 var delimitedStr=str.replace("[image]","").replace("[/caption][/image]","").replace("[caption]","|");
                   var src=delimitedStr.substring(0,delimitedStr.indexOf("|"));
                   var caption=delimitedStr.substring(delimitedStr.indexOf("|")+1);
                    var finalStr="<figure><img src='" + src + "'/><figcaption> " + caption + "</figcaption></figure>";
                 alert(finalStr);
                   }