#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