Mẫu regex JavaScript nối với biến


91

Cách tạo mẫu regex được nối với biến, giống như sau:

var test ="52";
var re = new RegExp("/\b"+test+"\b/"); 
alert('51,52,53'.match(re));

Cảm ơn

Câu trả lời:


147
var re = new RegExp("/\b"+test+"\b/"); 

\btrong một chuỗi ký tự là một ký tự xóa lùi. Khi đặt một regex trong một chuỗi ký tự, bạn cần thêm một vòng thoát:

var re = new RegExp("\\b"+test+"\\b"); 

(Bạn cũng không cần //trong bối cảnh này.)


16
Có nhiều nơi mà hàm khởi tạo của kiểu tích hợp có thể được sử dụng cả khi có hoặc không new. Tuy nhiên, để nhất quán với các đối tượng khác, nơi điều này có thể không đúng, và sự rõ ràng nói chung, tôi sẽ luôn sử dụng new.
bobince

1
Một cách khác là sử dụng đơn dấu ngoặc kép cho rõ ràng, do đó bạn không cần phải thoát khỏi back-slashes:new RegExp('\b'+test+'\b');
IQAndreas

5
Bạn vẫn cần phải thoát khỏi các dấu gạch chéo ngược. Dấu ngoặc kép không có các quy tắc thoát khác với dấu ngoặc kép trong JavaScript (không giống như PHP).
bobince

Câu trả lời này cũng giải quyết câu hỏi tương tự khi cố gắng sử dụng các toán tử đường viền trên một biến với các hàm regexing JS .match () và .replace ().
HoldOffHunger

Chỉ cần những gì tôi đang tìm kiếm. Phần về When putting a regex in a string literal you need one more round of escaping; có thông tin cơ bản nào về (lý do) điều này không?
Bas Peeters

9

bạn có thể dùng

/(^|,)52(,|$)/.test('51,52,53')

nhưng tôi đề nghị sử dụng

var list = '51,52,53';
function test2(list, test){
    return !((","+list+",").indexOf(","+test+",") === -1)
}
alert( test2(list,52) )

9

Với ES2015 (hay còn gọi là ES6), bạn có thể sử dụng các ký tự mẫu khi xây dựng RegExp :

let test = '53'
const regexp = new RegExp(`\\b${test}\\b`, 'gi') // showing how to pass optional flags
console.log('51, 52, 53, 54'.match(regexp))


3
typo: biểu thức chính quy phải RegExp
NFpeter
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.