正则表达式将a更改为取决于下一个单词

时间:2012-06-08 23:31:14

标签: javascript regex

所以我尝试编写一个脚本,将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,这是不正确的。

那么,是否有正则表达式可以涵盖在英语中使用aan的规则?谢谢!

1 个答案:

答案 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 .