所以我尝试编写一个脚本,将a
转换为an
(必要时)。它比我想象的要难。
var txt = "This is a apple.";
var pos = txt.search(/a\s[aeiou]/i);
txt = pos != -1 ?
txt.substring(0,pos+1) + "n" + txt.substring(pos+1,txt.length) :
txt;
//"This is an apple."
它正常运行,但是当我尝试"There are 60 minutes in a hour."
时,由于正则表达式,它并没有将其更改为an
。所以我改变了它:
var pos = txt.search(/a\s([aeiou]|hour)/i);
现在它正在工作(至少是“小时”)。但现在如果我放"There are people in a university."
,它会将其更改为an university
,这是不正确的。
那么,是否有正则表达式可以涵盖在英语中使用a
和an
的规则?谢谢!
答案 0 :(得分:2)
前一段时间StackOverflow上有一个非常好的主题:How can I correctly prefix a word with "a" and "an"?
基本上,共识是最好的方法是从中学习大数据集,第二种最好的方法是使用发音词典,例如为语音合成设计的CMU词典。
举一个CMU词典的例子:
University comes out as:
Y UW N AH V ER S AH T IY .
Umbrella is rendered as:
AH M B R EH L AH .