匹配精确字符串

233

如果文本需要完全匹配,那么在 JavaScript 中的正则表达式是什么(如果有影响的话)?也就是说,在字符串的另一端不能有多余的字符。

例如,如果我要匹配abc,那么1abc11abcabc1都不会匹配。


9
对于那些不熟悉正则表达式的人,这有两个很好的答案,取决于你要找什么。提问者真正想要的是\babc\b,这将允许例如123 abc 123匹配abc(但不包括问题中的负例);然而,^abc$将确保a在字符串的开头,c在末尾 - 否则就不会匹配。 - Andrew
是的,我们可以使用“词边界”来匹配精确的字符串。 代码 `let text = '你知道这是全部吗?'; let pattern = /\bis\b/g;text.match(pattern);` 结果: 匹配 1: 20-22 | 是 匹配 2: 33-35 | 是 - undefined
3个回答

421

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


3
@Jake,我很高兴霍华德的回答起作用了,但我认为你应该注意一下,它仅适用于字符串中只有abc这一项的情况。例如,它将无法匹配“字母表中前3个字母是abc”。 - matchew
这对我有用,也许我的示例应该是“abc def ghi”作为匹配目标。 - Jake Pearson
1
@Jake 如果你的字符串是 "abc def ghi",那么 /^abc$/ 就不起作用了。例如:http://jsfiddle.net/XUyAc/ - matchew
3
我明白了,如果我想匹配"abc def ghi",我的正则表达式将是 ^abc def ghi$ - Jake Pearson
6
注意:为了使具备交替项的模式与整个字符串匹配,可能需要将其包装在一个(非)捕获组中:/^(?:abc|def)$//^(abc|def)$/。否则,如果未使用该组,则 /^abc|def$/ 将在字符串开头匹配 abc 或在字符串末尾匹配 def - Wiktor Stribiżew
显示剩余4条评论

60

这要看情况。您可以

string.match(/^abc$/)

但这不会匹配以下字符串:'the first 3 letters of the alphabet are abc. not 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


13
这是因为这不是回答原帖提出的问题。原帖明显不想匹配“字母表前三个字母是abc”,而这里的第二个解决方案无法匹配常规的正则表达式,例如 /^[abc]+$/。 - DJClayworth

16

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接