2017-07-31 54 views
3

我想寫一個正則表達式將在1 (555) 555-5555匹配(555)括號,並用什麼代替括號字符集合號碼中的括號。然而,不存在應如果只有一個括號,如在這場比賽中,1 555)555-5555或者如果有括號,如(6505552368)內超過三個數字/字符。使用正則表達式匹配裏面

我最好的嘗試似乎是這個

re = /\((?=.{3})/; 

,但只會匹配和替換第一個括號,這是沒有太大的幫助。希望有任何想法。

+3

也許['s.replace(/ \((\ d {3})\)/,'$ 1')'](https://regex101.com/r/K8AUvd/2)?或者,['s.replace(/ ^([\ d \ s] *)\((\ d {3})\)/,'$ 1 $ 2')'](https://regex101.com/r/ K8AUvd/1)? –

回答

2

如果您需要刪除大約3個位數的第一括號中的字符串中,你可以使用

s.replace(/\((\d{3})\)/, '$1') 

regex demo

詳細

  • \( - 一個(字面符號
  • (\d{3}) - 第1組(後簡稱與$1反向引用)
  • \) - 字面)
  • $1 - 反向引用爲1組

或者,如果您只需要刪除這兩個括號中發生之後的零個或多個數字/空格出現,使用

s.replace(/^([\d\s]*)\((\d{3})\)/, '$1$2') 

another regex demo

詳細

  • ^ - 串的開始
  • ([\d\s]*) - 第1組(以後簡稱與$1):0+數字或/和空格
  • \( - 一個(
  • (\d{3}) - 第2組捕獲3位數字
  • \) - 字面)

這裏,$1$2,需要兩個反向引用恢復的()之外的文本。

+0

這看起來比我的解決方案更好。 +1 – Rajesh

1

不知道這是否是最好的正則表達式,但是這會工作。

正則表達式:(:^ |()(\ d {3})(:) | $)

爲了演示的目的,我已經取代()_?。

var regex = /(?:^|\()(\d{3})(?:\)|$)/g; 
 
var str = "1 (555) 555-5555 (1234), or (123 or 123)"; 
 

 
console.log(str.replace(regex, "_$1_"))

在我的理解,@Wiktor的回答是好。儘管如此,仍然把我的答案作爲參考。

+0

爲什麼不只是'/ \((\ d +?)\)/ g'? – debute

+0

是的。看到Wiktor的答案,我想這是更好的解決方案。不知道這個解決方案有多糟糕。我想我會保留這個答案作爲替代。如果你的事情非常糟糕,請隨時投票。 :-) – Rajesh

0

試試這個:^ \ d +(\ d \ d \ d)\ d + - \ d + $

它接受一個單一的 - 號在括號後的數字只有3括號內的數字?

0

我改變了一點Rajesh的解決方案,所以每個括號將被替換爲無。

var patt = /\((\d{0,3})\)/g; 
var str = '55 (555) 555-(55)55'; 
console.log(str.replace(patt, "$1")); 

但是它並不能解決你是否需要替換嵌套括號。爲此目的,您可以使用此代碼:

var patt = /\((\d{0,3})\)/g; 
var str = '55 (5(5)(((5)))) 555-(55)55'; 
while(str.match(/\((\d{0,3})\)/g)) 
{ 
    str = str.replace(patt, "$1"); 
} 
console.log(str); 

我希望它有幫助。