Khớp toàn bộ chuỗi


165

Biểu thức chính quy (trong JavaScript nếu có vấn đề) chỉ khớp nếu văn bản khớp chính xác là gì? Đó là, không nên có thêm ký tự ở đầu kia của chuỗi.

Ví dụ, nếu tôi đang cố gắng để phù hợp cho abc, sau đó 1abc1, 1abcabc1sẽ không khớp.


5
Đối với những người mới sử dụng regex, có hai câu trả lời hay cho vấn đề này, tùy thuộc vào những gì bạn đang tìm kiếm. Người hỏi thực sự muốn \babc\b, điều này sẽ cho phép ví dụ 123 abc 123phù hợp với abc(nhưng không phải là ví dụ tiêu cực như trong câu hỏi); tuy nhiên, ^abc$sẽ đảm bảo rằng đó alà ở đầu chuỗi và cở cuối - nếu không nó sẽ không khớp.
Andrew

Câu trả lời:


305

Sử dụng các dấu phân cách bắt đầu và kết thúc: ^abc$


3
@Jake, tôi rất vui vì câu trả lời của Howard đã hoạt động, nhưng tôi nghĩ bạn nên lưu ý rằng nó sẽ chỉ hoạt động khi chỉ abc là mục duy nhất trong chuỗi. Ví dụ: Nó sẽ không khớp với '3 chữ cái đầu tiên trong bảng chữ cái là abc'
matchew

Điều này làm việc cho tôi, có lẽ ví dụ của tôi nên là "abc def ghi" làm mục tiêu phù hợp.
Jake Pearson

@Jake nếu chuỗi của bạn là "abc def ghi" thì / ^ abc $ / sẽ không hoạt động. ví dụ: jsfiddle.net/XUyAc
mai mối

2
Tôi hiểu điều đó, nếu tôi muốn khớp với "abc def ghi", biểu thức chính của tôi sẽ là^abc def ghi$
Jake Pearson

2
Lưu ý: để tạo một mẫu có xen kẽ khớp với toàn bộ một chuỗi, có thể cần phải bọc nó bằng một nhóm bắt (không): /^(?:abc|def)$/hoặc /^(abc|def)$/. Mặt khác, nếu nhóm không được sử dụng, /^abc|def$/sẽ khớp abcở đầu chuỗi HOẶC defở cuối chuỗi.
Wiktor Stribiżew

40

Nó phụ thuộc. Bạn có thể

string.match(/^abc$/)

Nhưng điều đó sẽ không khớp với chuỗi sau: '3 chữ cái đầu tiên của bảng chữ cái là abc. không abc123 '

Tôi nghĩ bạn sẽ muốn sử dụng \b(ranh giới từ):

var str = 'the first 3 letters of the alphabet are abc. not abc123';
var pat = /\b(abc)\b/g;
console.log(str.match(pat));

Ví dụ trực tiếp: http://jsfiddle.net/uu5VJ/

Nếu giải pháp trước đây hiệu quả với bạn, tôi sẽ khuyên bạn không nên sử dụng nó.

Điều đó có nghĩa là bạn có thể có một cái gì đó như sau:

var strs = ['abc', 'abc1', 'abc2']
for (var i = 0; i < strs.length; i++) {
    if (strs[i] == 'abc') {
        //do something 
    }
    else {
        //do something else
    }
}

Trong khi bạn có thể sử dụng

if (str[i].match(/^abc$/g)) {
    //do something 
}

Nó sẽ được sử dụng nhiều tài nguyên hơn đáng kể. Đối với tôi, một quy tắc chung là so sánh chuỗi đơn giản sử dụng biểu thức điều kiện, đối với mẫu động hơn sử dụng biểu thức chính quy.

Thông tin thêm về các biểu thức JavaScript: https://developer.mozilla.org/en/JavaScript/Guide/Regular_Expressions


12
@NiharSawant Đó là vì đây không phải là câu trả lời cho câu hỏi mà OP đã hỏi. OP rõ ràng không muốn khớp "3 chữ cái đầu tiên của bảng chữ cái là abc" và giải pháp thứ hai ở đây không hoạt động để phù hợp với các biểu thức chung, ví dụ / ^ [abc] + $ /
DJClayworth

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.