2015-12-04 17 views
5

Tôi đang gặp khó khăn với một số regex, trong javascript không có tùy chọn tìm kiếm điển hình, chỉ khớp với một nhóm nếu nó không đứng trước chuỗi:Regex - Không phù hợp với một nhóm nếu nó bắt đầu bằng một chuỗi trong javascript

(^|)(www\.[\S]+?(?= |[,;:!?]|\.( )|$)) 

như vậy trong những điều sau

hello http:/www.mytestwebsite.com is awesome 

tôi đang cố gắng để phát hiện nếu www.mytestwebsite.com được preceeded bởi

/ 

và nếu đó là tôi không muốn để phù hợp, nếu không phù hợp với đi. Tôi đã cố gắng sử dụng một cái nhìn phía trước nhưng nó có vẻ mâu thuẫn với cái nhìn phía trước mà tôi đã có.

Tôi đã chơi xung quanh với việc đặt (?! & # x2f) ở các khu vực khác nhau mà không thành công.

(^|)((?!&#x2f)www\.[\S]+?(?= |[,;:!?]|\.( )|$)) 

Một nhìn về phía trước để không phù hợp nếu trận đấu được trước

+0

Bạn đã thử '(^ | / |) (www \. [\ S] +? (? = | [,;:!?] | \. ( ) | $))'? – jperezov

+0

@jperezov bao gồm giá trị & # x2fl trong kết quả phù hợp. – JonFriesen

+0

Bạn chỉ có thể làm hai trận đấu. – miken32

Trả lời

3

Do thiếu lookbehinds trong JS, cách duy nhất để đạt được mục tiêu của bạn
là để phù hợp với những trang web có chứa các errant / là tốt.

Điều này là do một lookahead sẽ không thăng tiến vị trí hiện tại.
Chỉ một số khớp với trên văn bản có thể tiêu thụ mới sẽ được chuyển vị trí.

Nhưng, cách giải quyết tốt luôn là bao gồm văn bản không chính xác làm tùy chọn
trong regex. Bạn sẽ đặt một số nhóm chụp xung quanh nó, sau đó kiểm tra nhóm
cho một trận đấu. Nếu nó phù hợp, bỏ qua, đi đến trận đấu tiếp theo.

Điều này yêu cầu phải ngồi trong một vòng lặp kiểm tra từng kết quả phù hợp thành công.
Trong regex dưới đây, nếu nhóm 1 khớp, không lưu trữ url nhóm 2,
Nếu không, hãy lưu trữ url nhóm 2.

(/)?(www\.\S+?(?= |[,;:!?]|\.( )|$))

Formatted:

(&\#x2f;)?     # (1) 
(       # (2 start) 
     www\. \S+? 
     (?= 
      &\#x20; 
     | [,;:!?] 
     | \. 
      (&\#x20;)     # (3) 
     | $ 
    ) 
)        # (2 end) 
0

Một tùy chọn khác (và tôi đã thực hiện kiểm tra hiệu suất zero) sẽ được sử dụng string.replace() với một regex và một callback như tham số thứ hai.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace

Sau đó, bên trong của hàm thay thế, hãy thêm/gắn bất hợp pháp/ký tự mà bạn không muốn để phù hợp với chuỗi phù hợp, sử dụng tham số bù đắp được chuyển sang người gọi lại (xem ở trên tài liệu) bạn có thể xác định mỗi trận đấu và vị trí của nó và quyết định có nên thay thế văn bản hay không.

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