【问题标题】:Match exact string匹配精确字符串
【发布时间】:2021-10-18 11:37:26
【问题描述】:

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

例如,如果我尝试匹配abc,则1abc11abcabc1 将不匹配。

【问题讨论】:

  • 对于那些不熟悉正则表达式的人来说,有两个很好的答案,具体取决于您要查找的内容。提问者真的想要\babc\b,这将允许例如123 abc 123 匹配 abc (但不是问题中的负面例子);但是,^abc$ 将确保 a 在字符串的开头,c 在结尾 - 否则将不匹配。

标签: javascript regex


【解决方案1】:

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

【讨论】:

  • @Jake,我很高兴霍华德的回答有效,但我认为您应该注意,只有 abc 是字符串中唯一的项目时它才会有效。例如,它不会匹配“字母表中的前 3 个字母是 abc”
  • 这对我有用,也许我的例子应该是“abc def ghi”作为匹配目标。
  • @Jake 如果您的字符串是“abc def ghi”,那么 /^abc$/ 将不起作用。例如:jsfiddle.net/XUyAc
  • 我明白了,如果我想匹配 "abc def ghi" 我的正则表达式将是 ^abc def ghi$
  • 注意:要使带有交替的模式匹配整个字符串,可能需要用(非)捕获组包装它:/^(?: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

【讨论】:

  • @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了解更多信息

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-26
    • 2023-03-12
    相关资源
    最近更新 更多