匹配整个字符串

Jak*_*son 144 regex

什么是正则表达式(在JavaScript中,如果重要的话)只匹配文本是否完全匹配?也就是说,字符串的另一端不应该有额外的字符.

例如,如果我想匹配abc,然后1abc1,1abcabc1将不匹配.

How*_*ard 261

使用开始和结束分隔符: ^abc$

  • 注意:要使具有交替的模式匹配整个字符串,可能需要用(非)捕获组将其包裹:`/^(?:abc|def)$/` 或 `/^(abc|def) $/`。否则,如果未使用该组,`/^abc|def$/` 将匹配字符串开头的 `abc` 或字符串结尾的 `def`。 (4认同)
  • @Jake,我很高兴howards回答有效,但我认为你应该注意它只有在abc是字符串中唯一的项目时才有效.例如,它不匹配'字母表中的前3个字母是abc' (3认同)
  • 我明白了,如果我想匹配“abc def ghi”,我的正则表达式将是`^abc def ghi$` (3认同)

mat*_*hew 35

这取决于.你可以

string.match(/^abc$/)
Run Code Online (Sandbox Code Playgroud)

但是这与下面的字符串不匹配:'字母表的前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));
Run Code Online (Sandbox Code Playgroud)

实例: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
    }
}
Run Code Online (Sandbox Code Playgroud)

虽然你可以使用

if (str[i].match(/^abc$/g)) {
    //do something 
}
Run Code Online (Sandbox Code Playgroud)

这将是相当多的资源密集型.对我来说,一般的经验法则是使用条件表达式进行简单的字符串比较,对于更动态的模式使用正则表达式.

有关JavaScript regex的更多信息:https://developer.mozilla.org/en/JavaScript/Guide/Regular_Expressions

  • @NiharSawant这是因为这不是OP问的问题的答案.OP显然*不*希望匹配"'字母表的前3个字母是abc",这里的第二个解决方案不适用于匹配一般正则表达式,例如/ ^ [abc] + $ / (12认同)

Pru*_*sse 14

"^"用于结尾的"$"行的开头.例如.:

var re = /^abc$/;
Run Code Online (Sandbox Code Playgroud)

匹配"abc"但不匹配"1abc"或"abc1".您可以访问https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions了解更多信息.