2010-07-03 29 views
56

tôi tìm thấy một số câu hỏi tương tự, nhưng nó không giúp tôi ... vì vậy tôi có vấn đề này:Javascript - Sử dụng biến trong trận đấu chuỗi

var xxx = "victoria"; 
var yyy = "i"; 
alert(xxx.match(yyy/g).length); 

Tôi không biết làm thế nào để vượt qua biến trong lệnh trận đấu. Hãy giúp tôi. Cảm ơn bạn.

+0

Bản sao y của [Làm thế nào để bạn vượt qua một biến để một Regular Expression JavaScript?] (http://stackoverflow.com/questions/494035/how-do-you-pass-a-variable-to-a-regular-expression-javascript). Tìm kiếm thêm;) –

+0

Một điều nữa: Nếu bạn đang sử dụng biến để xây dựng một regexp, cần lưu ý rằng biến có thể chứa các ký tự đặc biệt regexp. ví dụ. nếu bạn vượt qua "C++", trình biên dịch regex sẽ phàn nàn 'Cú pháp Cú pháp: Biểu thức chính quy không hợp lệ:/C++ /: Không có gì để lặp lại ' – LotusH

Trả lời

119

Mặc dù chức năng trận đấu không chấp nhận xâu như mẫu regex, bạn có thể sử dụng constructor của đối tượng RegExp và thông qua đó để các chức năng String.match:

var re = new RegExp(yyy, 'g'); 
xxx.match(re); 

Bất kỳ cờ bạn nhu cầu (chẳng hạn như/g) có thể đi vào tham số thứ hai.

+2

+1, đây là cách ưu tiên, BTW, nếu đối số được truyền cho phương thức 'match' không phải là đối tượng' RegExp', bên trong hàm tạo «RegExp' sẽ được gọi bằng giá trị đó, vì vậy bạn có thể sử dụng * string pattern *, ví dụ: '" a123 ".match (" \\ d + ") [0] ===" 123 ";' – CMS

-4
xxx.match(yyy, 'g').length 
+3

Thao tác này sẽ chỉ hoạt động * trong Firefox và thậm chí nó không được ghi lại. Đặc tả này chỉ ra rằng phương thức ['String.prototype.match'] (http://bclary.com/2004/11/07/#a-15.5.4.10) chỉ mong đợi * một đối số *. Sử dụng hàm tạo «RegExp', vì @Chris gợi ý là cách ưu tiên. – CMS

6

Bạn phải sử dụng RegExp object nếu mô hình của bạn là chuỗi

var xxx = "victoria"; 
var yyy = "i"; 
var rgxp = new RegExp(yyy, "g"); 
alert(xxx.match(rgxp).length); 

Nếu mẫu không phải là chuỗi động:

var xxx = "victoria"; 
var yyy = /i/g; 
alert(xxx.match(yyy).length); 
+0

Bạn nhận được một downvote tưởng tượng để sử dụng w3schools thay vì MDN! https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/RegExp – flaky

0

đối với tôi dù sao, nó giúp để xem nó được sử dụng. chỉ cần thực hiện việc này bằng cách sử dụng ví dụ "lại":

var analyte_data = 'sample-'+sample_id; 
var storage_keys = $.jStorage.index(); 
var re = new RegExp(analyte_data,'g'); 
for(i=0;i<storage_keys.length;i++) { 
    if(storage_keys[i].match(re)) { 
     console.log(storage_keys[i]); 
     var partnum = storage_keys[i].split('-')[2]; 
    } 
} 
0

Ví dụ. Để tìm số nguyên âm trong chuỗi

var word='Web Development Tutorial'; 
var vowels='[aeiou]'; 
var re = new RegExp(vowels, 'gi'); 
var arr = word.match(re); 
document.write(arr.length); 
2

Ví dụ:

let myString = "Hello World" 
let myMatch = myString.match(/H.*/) 
console.log(myMatch) 

Hoặc

let myString = "Hello World" 
let myVariable = "H" 
let myReg = new RegExp(myVariable + ".*") 
let myMatch = myString.match(myReg) 
console.log(myMatch) 
Các vấn đề liên quan