2015-10-04 76 views
2

我很新的正則表達式,我試圖消除所有文字括號外只保留括號內的一切。如何更換或刪除所有文本字符串括號外的JavaScript

對於實施例1,

Hello,this_isLuxy.(example) 

這樣:

(example) 

實施例2:

luxySO_i 
:週期

luxySO_i.example 

此後除去一切10

使用JS +正則表達式?非常感謝!

回答

2

對於這個簡單的字符串,你可以使用indexOfsubstring功能:

var openParenthesisIndex = str.indexOf('('); 
var closedParenthesisIndex = str.indexOf(')', openParenthesisIndex); 
var result = str.substring(openParenthesisIndex, closedParenthesisIndex + 1); 

好吧,如果你想使用正則表達式,那麼這將是一個有點複雜。不管怎麼說,在這裏你去:

var str = "Hello,this_(isL)uxy.(example) asd (todo)"; 
var result = str.replace(/[^()](?=([^()]*\([^()]*\))*[^()]*$)/g, ''); 
console.log(result); // "(isL)(example)(todo)" 

總之,這將替換任何非()字符,其後是零個或多個平衡括號。但嵌套或非平衡括號會失敗。

+0

非常感謝羅希特。我想使用正則表達式來達到一致性的目的。如果這可以使用正則表達式解決這將是很好的。 – luxy

+0

@luxy添加了基於正則表達式的解決方案,如果它適合您:) –

+0

謝謝limekin和rohit。 Rohit,我試過你的正則表達式,它工作得很好。然而,是否有辦法在另一個 – luxy

1

只保留在括號內可以使用

s.replace(/.*?(\([^)]*\)).*?/g, "$1") 

意義的事情是:

  • .*?任何字符(但最短的序列)
  • \(一個開括號中的任意序列
  • [^)]*零個或多個字符是不是一個封閉的括號
  • \)右括號
  • .*?任何字符(但最短的)的任何序列

中間的三個要素是什麼,使用分組(...)$1保持。

要刪除先內後外的一切表達的無非是:

s.replace(/\..*/, "") 

含義:

  • \.點字符(.是特殊的,否則將意味着 「任何字符」)
  • .*任何字符的任何序列(即一切直到字符串的結尾)

用空字符串替換它

+0

感謝您的詳細說明。我試了兩個例子。對於第一個例子,只保留圓括號內的東西,正則表達式的工作原理和它打印括號內的所有內容。但它以這種格式打印「(isL)(example)(todo)」。我想打破每個括號並將其作爲列表以換行符形式打印。第二個示例是,在第一個時間段後刪除所有內容,它會在第一個時間段後刪除所有內容。在這種情況下,我也有一個列表格式,看起來像這個m_name.Luxy,myname.Luxy等,我想從每一行中刪除週期。這是否也可以從上述正則表達式? – luxy

+0

@ rohit's regex「str.replace(/ [^()] +(?=([^()] * \([^()] * \))* [^()] * $)/ g,' ');當括號爲這個時,效果很好:(isL)(example)(todo)「。假設那些圓括號都是圓點,我如何用空格替換點。我真的很感謝這個正則表達式的幫助,因爲我對它很陌生。謝謝 – luxy

相關問題