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

#javascript #c# #regex

Вопрос:

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

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

Комментарии:

1. Для тех, кто новичок в регулярных выражениях, есть два хороших ответа на этот вопрос, в зависимости от того, что вы ищете. Спрашивающий действительно хочет babcb , чтобы, например 123 abc 123 , совпадало abc (но не с отрицательными примерами, как в вопросе); однако ^abc$ убедитесь, что a это в начале строки и c в конце — иначе оно не будет совпадать.

Ответ №1:

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

Комментарии:

1. @Jake, я рад, что ответ Говарда сработал, но я думаю, вы должны отметить, что он будет работать только тогда, когда единственным элементом в строке будет только abc. Например, он не будет соответствовать «первые 3 буквы в алфавите-это азбука».

2. Это сработало для меня, возможно, моим примером должен был быть «abc def ghi» в качестве цели матча.

3. @Jake если бы ваша строка была «abc def ghi», то /^abc$/ не работал бы. например: jsfiddle.net/XUyAc

4. Я понимаю, что, если я хочу соответствовать «abc def ghi», мое регулярное выражение будет ^abc def ghi$

5. Примечание: чтобы шаблон с чередованием соответствовал целой строке, может потребоваться обернуть его (не)группой захвата: /^(?:abc|def)$/ или /^(abc|def)$/ . В противном случае, если группа не используется, /^abc|def$/ она будет совпадать abc в начале строки или def в конце строки.

Ответ №2:

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

 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

Комментарии:

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

Ответ №3:

«^» Для начала строки «$» для ее конца. Например.:

 var re = /^abc$/;
 

Будет соответствовать «abc», но не «1abc» или «abc1». Вы можете узнать больше на https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions