【问题标题】:Strip a sentence with [bold] tags去掉带有 [bold] 标签的句子
【发布时间】:2015-12-10 13:09:11
【问题描述】:

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

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

【问题讨论】:

  • @ChrisDavis var str = "Hallo [bold]ik[/bold] ben een zin [bold]met bold[/bold]"; var spited = str.split("[bold]"); console.log(spited.toString().replace(",", "").split("[/bold]")); if(str.indexOf("[bold]") != -1){ console.log(str.indexOf("[bold]") + "contains [bold]"); }else{ console.log(str.indexOf("[bold]") + "does not contain [bold]"); }
  • 看起来您需要 str.split(" ")regex 的组合。在这种情况下你可以使用正则表达式吗?
  • @benjaminz 允许使用它是什么意思?可以举个例子吗?

标签: javascript json idml


【解决方案1】:

我认为您可以使用正则表达式来提取包含在[bold] 中的所有这些文本。

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

您将收到"ik"

【讨论】:

  • 谢谢,虽然这不是我的意思。我想去除 [bold] [/bold] 标签,并从 [bold] [/bold] 标签之间的内容生成此代码:&lt;CharacterStyleRange FillColor="" FontStyle="Bold"&gt; &lt;Properties&gt; &lt;AppliedFont type="string"&gt;Agency FB&lt;/AppliedFont&gt; &lt;/Properties&gt; &lt;Content&gt;ik&lt;/Content&gt; &lt;/CharacterStyleRange&gt; 而对于 [bold] 标签中没有的内容,我想要这个: &lt;CharacterStyleRange FillColor=""&gt; &lt;Properties&gt; &lt;AppliedFont type="string"&gt;Agency FB&lt;/AppliedFont&gt; &lt;/Properties&gt; &lt;Content&gt;Hallo&lt;/Content&gt; &lt;/CharacterStyleRange&gt;
  • @Ivarr08 然后你可以添加字符串的其他部分 "Agency FBMet bold" 与您提取的数据。
【解决方案2】:

也许这个资源对你有帮助: 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-04-30
    • 2019-02-20
    • 1970-01-01
    • 2011-05-04
    • 2020-01-03
    • 1970-01-01
    • 2011-10-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多