匹配整个字符串


165

仅当文本完全匹配时才匹配的正则表达式(如果需要的话)是什么?也就是说,字符串的另一端不应有多余的字符。

例如,如果我想匹配abc,然后1abc11abcabc1将不匹配。


5
对于那些正则表达式的新手,有两个很好的答案,这取决于您要查找的内容。提问者真正想要的是\babc\b,这将允许例如123 abc 123匹配abc(但不能像问题中那样否定例子);但是,请^abc$确保a该字符串位于字符串的开头和c结尾-否则将不匹配。
安德鲁(Andrew)

Answers:


305

使用开始和结束定界符: ^abc$


3
@Jake,很高兴我的答案很有效,但是我想您应该注意,只有字符串中只有abc时,它才有效。例如,它将不匹配“字母表中的前3个字母是abc”
matchew 2011年

这对我有用,也许我的示例应该以“ abc def ghi”作为比赛目标。
杰克·皮尔森

@Jake如果您的字符串是“ abc def ghi”,则/ ^ abc $ /将不起作用。例如:jsfiddle.net/XUyAc
matchew 2011年

2
我明白了,如果我想匹配“ abc def ghi”,我的正则表达式将是^abc def ghi$
Jake Pearson

2
注意:要使具有交替形式的模式与整个字符串匹配,可能有必要使用(非)捕获组将其包装:/^(?:abc|def)$//^(abc|def)$/。否则,如果未使用组,/^abc|def$/则将abc在字符串的开头或字符串def的末尾进行匹配。
WiktorStribiżew17年

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


12
@NiharSawant这是因为这不是OP提出的问题的答案。该OP显然并不想匹配““字母表的前3个字母是ABC”,这里的第二个解决方案不起作用匹配一般的正则表达式,如/ ^ [ABC] + $ /
DJClayworth

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.