2010-09-25 17 views
6

Nếu tôi làm điều này:Javascript REGEX: Làm thế nào để có được `1` và không '11`

var string = "7,11,2" 
var check = string.match("/1/"); 

if(check != null){ 
    doSomething(); 
} else { 
    doSomethingElse(); 
} 

Sau đó check không phải là nullmatch đã tìm thấy 1 trong 11. Vì vậy, làm thế nào tôi nên tránh điều này và nhận được 1 khi nó thực sự xuất hiện?

Trả lời

6

Điều đó đang xảy ra vì nó khớp với một số 1 trong 11 và gọi nó là khớp. Bạn phải chắc chắn rằng không có một số sau 1. Hãy thử:

var check = string.match("/(^|\D)1(\D|$)/"); 

này sẽ tìm kiếm một cách bao quanh bởi nhân vật mà không phải là chữ số, hoặc khi bắt đầu/kết thúc của chuỗi (các ^$ neo).

+0

Cảm ơn rất nhiều nó hoạt động hoàn hảo !! Tôi sẽ chấp nhận câu trả lời của bạn ngay khi có thể! – Adam

+0

@zolex Vui lòng cho biết đầu vào nào sẽ phá vỡ regex – NullUserException

+0

regex này chỉ hoạt động đối với trường hợp đặc biệt này. xem câu trả lời upcomming của tôi cho một regex để kiểm tra xem một giá trị là trong một danh sách phân cách bằng cách nào đó ... –

2

Một cách khác là bao quanh nó với các neo ranh giới từ: /\b1\b/ sẽ chỉ khớp với 1 nếu nó không được bao quanh bởi các số, chữ cái hoặc dấu gạch dưới khác. Vì vậy, nó sẽ làm việc trong trường hợp của bạn (và là một chút dễ đọc hơn).

Tuy nhiên, sẽ không thành công trong các trường hợp như ID1OT - nếu bạn muốn trích xuất 1 từ đó, bạn chỉ có thể thực hiện điều đó bằng phương pháp @ NullUserException.

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