Regie for furigana(日文)

时间:2013-08-22 09:31:55

标签: regex ruby-characters

我试图创建正则表达式,从日语单词中删除假名(红宝石):

<ruby><rb>二度</rb><rp>(</rp><rt>にど</rt><rp>)</rp>と</ruby> //old string
二度と // new string

我创建了new = old.replace(/<rt>.*<\/rt>/,'').replace(/<rp>.*<\/rp>/,'').replace('<ruby><rb>','').replace('</rb></ruby>',''),它几​​乎可以工作。

当有多个ruby代码时,它无法按预期工作:

<ruby><rb>息</rb><rp>(</rp><rt>いき</rt><rp>)</rp></ruby>を<ruby><rb>切</rb><rp>(</rp><rt>き</rt><rp>)</rp></ruby>らして
息らして //new string, using function above (wrong)
息を切らして //should be this

我对RegExp很新,所以我不确定如何处理这个。

1 个答案:

答案 0 :(得分:1)

尝试使用

var newstring = oldstring.replace(/<rb>([^<]*)<\/rb>|<rp>[^<]*<\/rp>|<rt>[^<]*<\/rt>|<\/?ruby>/g, "$1");

这里的想法是捕获rb标签内容以将其置于替换模式中,使用其内容删除rp和rt标签,并删除ruby标记。

标签之间的内容用[^<] (所有不是<描述,因为这些标签(rb,rp,rt)不能嵌套。< / p>