0

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

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

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

当有多个ruby标签时,它不能按预期工作:

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

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

4

1 回答 1

1

尝试使用

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

这里的想法是捕获 rb 标签内容以将其置于替换模式中,rp 和 rt 标签与它们的内容一起被删除,并且 ruby​​ 标签也被删除。

标签之间的内容用[^<] (all that is not a <)描述,因为这些标签 (rb, rp, rt) 不能嵌套。

于 2013-08-22T10:04:42.153 回答