2011-09-27 27 views
5

Tôi đoán tôi có thể làm điều này với nhiều regex khá dễ dàng, nhưng tôi muốn thay thế tất cả dấu cách trong một chuỗi, nhưng không phải khi các dấu cách đó nằm giữa các dấu ngoặc đơn.Thay thế dấu cách nhưng không phải khi giữa các dấu ngoặc đơn

Ví dụ:

Here is a string (that I want to) replace spaces in. 

Sau regex Tôi muốn các chuỗi được

Hereisastring(that I want to)replacespacesin. 

Có một cách dễ dàng để làm điều này với lookahead hoặc lookbehing nhà khai thác?

Tôi hơi bối rối về cách họ làm việc và không thực sự chắc chắn họ sẽ làm việc trong tình huống này.

+2

những dấu ngoặc đơn có thể được lồng vào nhau? –

+0

Không có dấu ngoặc đơn lồng nhau. –

Trả lời

9

Hãy thử điều này:

replace(/\s+(?=[^()]*(\(|$))/g, '') 

Một lời giải thích nhanh chóng:

\s+   # one or more white-space chars 
(?=   # start positive look ahead 
    [^()]*  # zero or more chars other than '(' and ')' 
    (   # start group 1 
    \(  #  a '(' 
    |  #  OR 
    $  #  the end of input 
)   # end group 1 
)   # end positive look ahead 

Trong tiếng Anh đơn giản: nó phù hợp với một hoặc nhiều ký tự khoảng trắng nếu một trong hai một ( hoặc đầu vào end-of-có thể nhìn thấy phía trước mà không gặp phải bất kỳ dấu ngoặc đơn nào ở giữa.

Một bản demo Ideone trực tuyến: http://ideone.com/jaljw

trên sẽ không hoạt động nếu:

  • có được lồng ngoặc
  • ngoặc có thể được thoát
+0

Cảm ơn rất nhiều. Điều đó thật tuyệt! –

+0

Bạn đang chào đón Senica. –

Các vấn đề liên quan