Точное сопоставление строки

#javascript #regex

#javascript #регулярное выражение

Вопрос:

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

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

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

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

Ответ №1:

Используйте разделители start и end: ^abc$

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

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

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. OP явно не хочет сопоставлять «‘первые 3 буквы алфавита — abc», а второе решение здесь не работает для сопоставления общих регулярных выражений, например /^ [abc] $/

Ответ №3:

«^» В начале строки, «$» в ее конце. Например.:

 var re = /^abc$/;
  

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