我需要创建一个生成此代码的脚本:
<CharacterStyleRange FillColor="">
<Properties>
<AppliedFont type="string">Agency FB</AppliedFont>
</Properties>
<Content>Hallo</Content>
</CharacterStyleRange>
<CharacterStyleRange FillColor="" FontStyle="Bold">
<Properties>
<AppliedFont type="string">Agency FB</AppliedFont>
</Properties>
<Content>ik</Content>
</CharacterStyleRange>
<CharacterStyleRange FillColor="">
<Properties>
<AppliedFont type="string">Agency FB</AppliedFont>
</Properties>
<Content>ben een zin</Content>
</CharacterStyleRange>
<CharacterStyleRange FillColor="" FontStyle="Bold">
<Properties>
<AppliedFont type="string">Agency FB</AppliedFont>
</Properties>
<Content>Met bold</Content>
</CharacterStyleRange>
由此:
Hallo [bold]ik[/bold] ben een zin [bold]met bold[/bold]
基本上我想要的是用[bold] [/ bold]标签去掉句子,并为它创建一个新的(包含所有其他项目)。
我已经尝试了几件事但是没有能够正常工作,所以现在我在这里问。
它必须转换成的语言是IDML(这种语言用于构建InDesign文档)
答案 0 :(得分:0)
我认为您可以使用正则表达式来提取[bold]
中包含的所有这些文本。
var exp = "[bold]ik[/bold]";
var re = exp.match(/\[bold\](.*)\[\/bold\]/); //=> Array [ "[bold]ik[/bold]", "ik" ]
return re[1];
您将获得"ik"
。
答案 1 :(得分:0)
也许此资源对您有所帮助: https://regex101.com/r/xU5jO9/2 我的正则表达式是在右侧解释的。
在您的控制台中尝试此操作:
var myString = "Hallo [bold]ik[/bold] ben een zin [bold]met bold[/bold]";
var regex = new RegExp(/(\[bold\]?)(.*?)(\[\/bold\]?)/gi);
var replacePattern = "<CharacterStyleRange FillColor=\"\"> <Properties> <AppliedFont type=\"string\">$2</AppliedFont> </Properties> <Content>Hallo</Content> </CharacterStyleRange>";
myString.replace(regex, replacePattern);
我还没有测试它,但在控制台外面它应该保持断线。否则,在像sublime这样的文本编辑器中打开你的项目,并在那里做同样的事情。最好先制作一个copy / git commit。在Sublime中使用\2
代替$2
。
编辑:我添加了?
非贪婪的运算符,否则它将从第一个粗体开始标记到最后一个结束标记匹配。