2012-06-08 48 views
0

因此,我嘗試編寫一個腳本,將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的規則?謝謝!

+4

不,除非你想擺在特殊情況下,如「小時」和「大學」 gazillions。 – TimK

+1

@TimK - 以'uni'開頭的單詞總是使用'a'。 –

+1

@Derek - 並不總是,例如「一個無趣的想法」。 – plasticinsect

回答

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 . 
+0

這真的很複雜,我打算做。 –

+1

是的 - 但是因爲它與人們說話的方式有關,所以它確實是一個複雜的問題:) 儘管使用CMU字典方法,但每個單詞可以簡化爲Web服務調用。 – Soz

+0

所以看起來像使用JavaScript來做這件事是不可能的...... –

相關問題