JavaScript - Sử dụng biến trong đối sánh chuỗi


89

Tôi đã tìm thấy một số câu hỏi tương tự, nhưng nó không giúp được tôi. Vì vậy, tôi có vấn đề này:

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

Tôi không biết cách chuyển biến trong lệnh match. Xin vui lòng giúp đỡ. Cảm ơn bạn.



Một điều nữa: Nếu bạn đang sử dụng một 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 của regexp. ví dụ như nếu bạn vượt qua "c ++", trình biên dịch regex sẽ phàn nànSyntaxError: Invalid regular expression: /c++/: Nothing to repeat
dotslashlu

Câu trả lời:


187

Mặc dù hàm đối sánh không chấp nhận chuỗi ký tự dưới dạng mẫu regex, bạn có thể sử dụng phương thức khởi tạo của đối tượng RegExp và chuyển nó vào hàm String.match:

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

Bất kỳ cờ nào bạn cần (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 matchphương thức không phải là một RegExpđối tượng, thì bên trong hàm RegExptạo sẽ được gọi bằng giá trị đó, vì vậy bạn có thể sử dụng một mẫu chuỗi , ví dụ:"a123".match("\\d+")[0] === "123";
Christian C. Salvadó

10

Bạn phải sử dụng đối tượng RegExp nếu mẫu 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);

2
Bạn nhận được một phản đối tưởng tượng vì sử dụng w3schools thay vì MDN! developer.mozilla.org/en/docs/Web/JavaScript/Reference/…
không ổn định

9

Ví dụ:

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

Hoặc là

let myString = "Hello World"
let myVariable = "H"
let myReg = new RegExp(myVariable + ".*")
let myMatch = myString.match(myReg)
console.log(myMatch)

6

Thí 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);

0

đối với tôi, nó sẽ giúp ích khi thấy nó được sử dụng. vừa thực hiện điều 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];
    }
}

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

5
Điều này sẽ chỉ hoạt động trong Firefox và nó thậm chí không được ghi lại. Đặc tả nói rằng String.prototype.matchphương thức chỉ mong đợi một đối số . Sử dụng hàm RegExptạo, như @Chris gợi ý là cách ưu tiên.
Christian C. Salvadó
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.