2010-07-20 60 views
55

Có thể trong JavaScript để làm điều gì đó như preg_match không trong PHP?preg_match trong JavaScript?

Tôi muốn để có thể có được hai con số từ chuỗi:

var text = 'price[5][68]'; 

vào hai biến riêng biệt:

var productId = 5; 
var shopId = 68; 

Edit: tôi cũng sử dụng MooTools nếu nó sẽ giúp.

Trả lời

85

JavaScript có đối tượng RegExp thực hiện những gì bạn muốn. Đối tượng String có chức năng match() sẽ giúp bạn.

var matches = text.match(/price\[(\d+)\]\[(\d+)\]/); 
+26

Đối với các nhà cung cấp dịch vụ khác; 'text.match' sẽ trả về kết quả của đối sánh. vì vậy 'var match = text.match (/ price \ [(\ d +) \] \ [(\ d +) \] /)' và sau đó 'alert (match [1]);' – Maurice

26
var text = 'price[5][68]'; 
var regex = /price\[(\d+)\]\[(\d+)\]/gi; 
match = regex.exec(text); 

kết hợp [1] và match [2] sẽ chứa các số bạn đang tìm kiếm.

5

này nên làm việc:

var matches = text.match(/\[(\d+)\][(\d+)\]/); 
var productId = matches[1]; 
var shopId = matches[2]; 
4
var myregexp = /\[(\d+)\]\[(\d+)\]/; 
var match = myregexp.exec(text); 
if (match != null) { 
    var productId = match[1]; 
    var shopId = match[2]; 
} else { 
    // no match 
} 
13
var thisRegex = new RegExp('\[(\d+)\]\[(\d+)\]'); 

if(!thisRegex.test(text)){ 
    alert('fail'); 
} 

tôi thấy thử nghiệm để hành động preg_match hơn vì nó cung cấp một trở Boolean. Tuy nhiên bạn phải khai báo một RegExp var.

MIPO: RegExp tự thêm nó/lúc bắt đầu và kết thúc, vì vậy đừng vượt qua chúng.

+6

Bạn cũng có thể rút ngắn điều này bằng '/\ [(\ d +) \] \ [(\ d +) \] /. test (văn bản) ' – FlabbyRabbit

+0

Tôi đồng ý, vì tôi đang tìm cách tái tạo tính năng kiểm tra regex của preg_match khi tôi thấy tiêu đề của câu hỏi này ;) – flu

+0

Sử dụng hàm tạo lớp RegExp có lợi ích là nếu bạn cần phải nội suy một biến trong mẫu, phải mất một chuỗi! –

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