2012-11-29 39 views
15

thể trùng lặp:
Javascript RegExp + Word boundaries + unicode characterstừ Regex ranh giới b có vấn đề với umlauts (ký tự đặc biệt bằng tiếng Đức)

Trong ECMA Script regex (thử nghiệm ở đây để tham khảo: http://regexpal.com/) tôi nhận được sai tích cực với các ranh giới từ (sử dụng \b) và các ký tự umlaut. Ví dụ

regex \bPflanzen\b

không phải phù hợp với "Pflanzenöl" nhưng nó. Nếu tôi thay đổi ö thành oe mọi thứ hoạt động. Regex dường như không coi umlauts là một phần của từ mặc dù chúng có nhiều ngôn ngữ.

Giải pháp tốt nhất là gì?

+2

... và giải pháp tốt nhất là sử dụng XRegExp, vì [câu trả lời này] (http://stackoverflow.com/a/10591266/20938) đề xuất. –

Trả lời

11

Động cơ Regex có các ý tưởng khác nhau về cách hoạt động của các lớp ký tự viết tắt. \b được gắn chặt với \w mà là vô dụng trong hầu hết các nhiệm vụ regex nhưng thật đáng buồn chứng minh "đủ tốt" cho nhiều trường hợp để biện minh cho sự tồn tại liên tục của nó.

Trong trường hợp này, JavaScript chỉ xem xét ASCII [a-zA-Z0-9_] cho \w và kể từ \b phù hợp với một vị trí giữa một nhân vật từ \w và cái gì đó không phải là bạn sẽ nhận được các hành vi quan sát.

Cách giải quyết thông thường là sử dụng lookaround thay vì \b:

(?<![a-zA-ZäöüßÄÖÜ])Pflanzen((?![a-zA-ZäöüßÄÖÜ])) 

Tuy nhiên, JavaScript cũng không hỗ trợ lookbehind, vì vậy chúng ta cần phải làm điều gì đó khác:

(^|[^a-zA-ZäöüßÄÖÜ])Pflanzen(?![a-zA-ZäöüßÄÖÜ]) 

nào sẽ phù hợp hoặc là bắt đầu của chuỗi hoặc một ký tự không phải từ lớp đó. Trong mọi trường hợp, nó lộn xộn. Đó là khoảng thời gian, JavaScript được hỗ trợ regex thích hợp bao gồm Unicode và lookaround.

+0

Tham gia vào cộng đồng [ECMAScript] (http://www.ecmascript.org/community.php) và có câu nói của bạn về lý do tại sao nó nên ở trong ECMAScript ed 6, Harmony, ES Next, bất cứ điều gì. – RobG

+0

Tôi nghĩ rằng "lý do" là khá rõ ràng cho rằng số lượng ngày càng lớn của phần mềm (mà cũng cần phải xử lý các ngôn ngữ khác nhau) được viết bằng JS. Thiếu sự hỗ trợ Unicode thích hợp là một thiếu sót nghiêm trọng và khủng khiếp từ một ngôn ngữ hoặc thư viện chuẩn của nó trong những ngày này. Trong mọi trường hợp, tôi không phải là một đặc tả hoặc các tác giả tiêu chuẩn. Tôi thậm chí không có một đầu mối của JavaScript; Tôi là người sai khi tham gia. – Joey

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