0

我需要制作一个生成此代码的脚本:

<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 文档)

4

2 回答 2

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 之类的文本编辑器中打开您的项目并在那里执行相同的操作。最好先复制/ git commit。在 Sublime 中使用\2而不是$2.

编辑:我添加了?非贪婪运算符,否则它将从第一个粗体开始标记匹配到最后一个结束标记。

于 2015-12-10T14:48:12.697 回答
0

我认为您可以使用正则表达式来提取包含在[bold].

var exp = "[bold]ik[/bold]";
var re = exp.match(/\[bold\](.*)\[\/bold\]/); //=> Array [ "[bold]ik[/bold]", "ik" ]
return re[1];

你会得到"ik".

于 2015-12-10T14:37:50.057 回答