2015-01-14 79 views
0

我知道用正則表達式,你可以得到的每一個字和他們的第一個字母與我得到的第一個和最後一個字嘗試了大量的谷歌搜索,但無法找到任何兩個,而不是第一個或最後一個字) 我相信應該有可能在1個正則表達式而不是2個不同的。如何使用正則表達式

我的字符串和想要的結果的例子?

字符串:你好世界先生

會給予回覆:[ 'H', 'W']

+0

你的意思是第一個和最後一個單詞或第一個和最後一個單詞的首字母? – anubhava

回答

1
^\w|\b\w(?=\S+$) 

嘗試this.See演示。

https://regex101.com/r/fA6wE2/31

編輯:

^\s*(\w)|\b(\w)(?=\S+$) 

使用該搶的組或捕獲,如果有在啓動空間。

+1

如果輸入是' Hello dister:world',該怎麼辦? –

+0

阿維納什是正確的,也給了我這個錯誤: 未捕獲的SyntaxError:意外的標記^ 就此致電: elementText.match(?^ \ W | \ B \ W(= \ S + $)); – PrivateerGerrit

+0

@PrivateerGerrit檢查編輯 – vks

0

雖然將只處理相當具體的投入,你應該能夠使用類似:

var test = [ 
 
    "Get the first and last word", 
 
    "Hello world!", 
 
    "foo bar", 
 
    "this is a test, for matches", 
 
    "test" 
 
]; 
 

 
var rex = /^((\w*)\s?).*?(\s?(\w*)[^\w\s]*)$/; 
 

 
test.forEach(function(it) { 
 
    document.getElementById("results").textContent += JSON.stringify(rex.exec(it)) + "\n"; 
 
});
<pre id="results"></pre>

匹配2,4會給你的第一個和最後的修整版本話。

看,正則表達式/^((\w*)\s?).*?(\s?(\w*)[^\w\s]*)$/

  1. 匹配的單詞字符的第一序列,任選地隨後進行空白(匹配1是全序列,匹配2排除後空白字符)。
  2. 匹配任何東西,但留下最後一個字匹配的空間。
  3. 匹配另一個可選的空白字符,然後一些字的字符,然後別的(大概標點符號)(比賽3是完整的序列,匹配4不包括前導空格和尾隨標點符號)
0
^(\w).*\b(\w).*?$ 

會給你在找什麼。 regex101

+0

我收到第一個字作爲迴應。我需要一個JavaScript正則表達式,而不是php – PrivateerGerrit

+0

在這種情況下,語法是相同的。您只需使用「$ 1」和「$ 2」的捕獲。 – 1252748