我有一些这样的文字:
[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。
答案 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>");
答案 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);
}