Совпадение всей строки

165

Какое регулярное выражение (в JavaScript, если оно имеет значение) должно совпадать, только если текст является точным совпадением? То есть на другом конце строки не должно быть лишних символов.

Например, если я пытаюсь подстать abc, а затем 1abc1, 1abcи abc1будет не совпадать.

Джейк Пирсон
источник
5
Для новичков в regex есть два хороших ответа на этот вопрос, в зависимости от того, что вы ищете. Аскер действительно хочет \babc\b, что позволило бы, например, 123 abc 123соответствовать abc(но не отрицательные примеры, как в вопросе); однако, ^abc$убедитесь, что он aнаходится в начале строки и cв конце, иначе он не будет совпадать.
Андрей

Ответы:

305

Используйте начальный и конечный разделители: ^abc$

Говард
источник
3
@ Джейк, я рад, что ответ на этот вопрос сработал, но я думаю, вы должны заметить, что он будет работать только тогда, когда только abc является единственным элементом в строке. Например, он не будет соответствовать 'первые 3 буквы в алфавите abc'
matchew
Это сработало для меня, возможно, мой пример должен был быть "abc def ghi" в качестве цели матча.
Джейк Пирсон
@ Джейк, если ваша строка «abc def ghi», то / ^ abc $ / не будет работать. Например
Матч
2
Я понимаю, что если я хочу соответствовать "abc def ghi", моим регулярным выражением будет^abc def ghi$
Джейк Пирсон
2
Примечание: чтобы шаблон с чередованием соответствовал всей строке, может потребоваться заключить его в (не) группу захвата: /^(?:abc|def)$/или /^(abc|def)$/. В противном случае, если группа не используется, /^abc|def$/будет совпадать abcв начале строки ИЛИ defв конце строки.
Виктор Стрибьев
40

Это зависит. Ты мог

string.match(/^abc$/)

Но это не соответствует следующей строке: «первые 3 буквы алфавита abc. не abc123 '

Я думаю, что вы хотели бы использовать \b(границы слов):

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

Живой пример: http://jsfiddle.net/uu5VJ/

Если первое решение работает для вас, я бы посоветовал не использовать его.

Это означает, что у вас может быть что-то вроде следующего:

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

Хотя вы могли бы использовать

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

Это было бы значительно более ресурсоемким. Для меня общее правило: для простого сравнения строк используйте условное выражение, для более динамического шаблона - регулярное выражение.

Подробнее о регулярных выражениях JavaScript: https://developer.mozilla.org/en/JavaScript/Guide/Regular_Expressions

matchew
источник
12
@NiharSawant Это потому, что это не ответ на вопрос, заданный ОП. ОП явно не хочет сопоставлять «первые 3 буквы алфавита abc», и второе решение здесь не работает для сопоставления общих регулярных выражений, например / ^ [abc] + $ /
DJClayworth