为什么String.prototype.match()在字符串只有一个唯一匹配时返回两个元素?

时间:2017-09-23 20:19:33

标签: javascript regex

我无法理解为什么这段代码片段会在两个字符串上返回一个数组" BEARING"而不只是一个字符串" BEARING。有什么想法吗?



const cleanedString = "ANGULAR CONTACT (ROLLING) BEARING"

const noun = cleanedString.match(/\b(\w+)$/);
console.log(noun);




3 个答案:

答案 0 :(得分:1)

您需要使用全局/g标志:



const cleanedString = "ANGULAR CONTACT (ROLLING) BEARING"

const noun = cleanedString.match(/\b(\w+)$/g);
console.log(noun);




来自String.prototype.match() [MDN]

  

如果正则表达式不包含g标志,str.match()将返回与RegExp.exec()相同的结果。

答案 1 :(得分:1)

它返回一个2的数组,表示

  1. 字符串的完全匹配
  2. 第一个捕获组中匹配的字符串
  3. 您可以通过

    使其成为非捕获组

    
    
    const cleanedString = "ANGULAR CONTACT (ROLLING) BEARING"
    
    const noun = cleanedString.match(/\b(?:\w+)$/);
    console.log(noun);
    
    
    

    其中?:表示该组将无法捕获

答案 2 :(得分:1)

默认匹配返回匹配为第一个值的字符串。

通过将parens放入正则表达式中,您要求返回匹配字符串的一部分(在这种情况下恰好相同)。

所以如果你的正则表达式是这样的话:

/^(\w+).*\b(\w+)$/

您将返回3个字符串

  1. 整个字符串
  2. ANGULAR
  3. 轴承