2013-06-05 42 views
11

Tôi muốn có một regex để khớp với một thẻ bắt đầu bằng # đơn giản giống như trong twitter (ví dụ: #someword). Tôi cũng muốn nó nhận ra các ký tự không chuẩn (như tiếng Tây Ban Nha, tiếng Do Thái hoặc tiếng Trung).Regex cho một hashtag (giống như twitter) cho phép các ký tự không phải ASCII

Đây là regex ban đầu của tôi: (^|\s|\b)(#(\w+))\b
-> nhưng không nhận dạng được ký tự không chuẩn.
Sau đó, tôi đã thử sử dụng XRegExp.js, hoạt động nhưng chạy quá chậm.

Bất kỳ đề xuất nào về cách thực hiện?

+0

Ranh giới từ không thể đơn giản được sử dụng với unicode. xem http://www.unicode.org/reports/tr18/#Default_Word_Boundaries – Toto

Trả lời

7

Cuối cùng tôi tìm thấy điều này: twitter-text.js liên kết hữu ích, về cơ bản là cách twitter giải quyết vấn đề này.

+0

Repo xuất sắc được chuyển đến đây: https://github.com/twitter/twitter-text/tree/master/js nơi nó được tổng hợp với một danh sách cho tất cả các ngôn ngữ: https://github.com/twitter/twitter-text – user1128896

0

#([^#]+)[\s,;]*

Giải thích: biểu thức chính quy này sẽ tìm kiếm một # theo sau là một hoặc không hơn # ký tự, tiếp theo là 0 hoặc nhiều khoảng trắng, dấu phẩy hoặc dấu chấm phẩy.

var input = "#hasta #mañana #babהַ"; 
var matches = input.match(/#([^#]+)[\s,;]*/g); 

Kết quả:

["#hasta ", "#mañana ", "#babהַ"] 

EDIT - Thay thế \ b cho ranh giới từ

+0

'?' sau '+' chỉ có nghĩa là "không quá tham lam" khi cố gắng khớp tất cả các ký tự không phải là băm. – itsmejodie

+0

Tôi không nghĩ rằng '\ b' hoạt động với các ký tự không phải latin. – georg

+1

Với '?' nó không khớp với '# mañana' và không có regonize '# mañana baby' như một thẻ bắt đầu bằng #. Chưa kể đến tiếng Do Thái - không nhận ra chút nào. – limlim

2

Với JS regexes mẹ đẻ mà không hỗ trợ unicode, lựa chọn duy nhất của bạn là để liệt kê một cách rõ ràng rằng các nhân vật có thể kết thúc thẻ và so khớp mọi thứ khác, ví dụ:

> s = "foo #הַתִּקְוָה. bar" 
"foo #הַתִּקְוָה. bar" 
> s.match(/#(.+?)(?=[\s.,:,]|$)/) 
["#הַתִּקְוָה", "הַתִּקְוָה"] 

[\s.,:,] nên bao gồm dấu cách, dấu chấm câu và bất kỳ điều gì khác có thể được coi là biểu tượng chấm dứt.

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