2016-12-20 72 views
-7

所以我正在研究一個javascript服務器,它爲我解析一些文本。我期待拿出一個有大寫字母的單詞。我知道這個問題可以用正則表達式來解決,儘管我不知道該怎麼做,並且正在尋找一些指導和一些開始。找到一個有大寫字母的單數詞

例如:

「我去去看我的朋友約翰昨天」

會因爲大寫字母返回「約翰」,但不會回到「我」,因爲它是句子中的第一個單詞。

多謝

+3

http://www.regular-expressions.info/tutorial.html – Bergi

+1

你真的需要忽略字符串中的第一個單詞,只能獲取* first *大寫的單詞嗎?你只使用ASCII或Unicode嗎? –

+0

什麼是「單詞」?只是ASCII字母?如果是,那麼SLePort的解決方案是最合適的。然而,如果你需要在「我從約翰那裏得到A」中得到「A」,那麼它就不適合你。 –

回答

1

簡單的回答:

(?!^)\b[A-Z]\w* 

它匹配不在行首的任何大寫字母(使用負向預讀和字邊界進行檢查)。

See it here at regex101

但是你的要求都比較粗略......

約翰和我是很好的朋友。

將返回I。那真的是你想要的嗎?

它只適用於連續的第一句話。另外一個以非字符開頭的行會失敗。例如:

-我就像約翰一樣,她說。

「這是一個報價。」

Check out this extended regex101

0
"I went to to go see my friend John yesterday".replace(/\s[A-Z][a-z]+/g, ' ***') 
+1

儘管這段代碼可以解決這個問題,但[包括一個解釋](// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)確實有助於提高您的帖子的質量。請記住,您將來會爲讀者回答問題,而這些人可能不知道您的代碼建議的原因。也請儘量不要用解釋性註釋來擠佔代碼,這會降低代碼和解釋的可讀性! – kayess

0

大寫字母后面至少一個非空白字符:

[A-Z]\S+ 
0

大概是這樣的,對不起,如果這是不是你想要的

var text = "I went to to go see my friend John yesterday"; 
var arr = text.split(' '); 

var upperCaseText = []; 

for(var i = 1; i < arr.length; i++) { 
    if(/[A-Z]/.test(arr[i])) { 
    upperCaseText.push(arr[i]); 
    } 
} 

console.log(upperCaseText); 
相關問題