#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