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



我无法理解为什么此代码段返回两个字符串"轴承"而不是仅仅弦乐"轴承"的数组。任何想法?

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

您需要使用全局/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()。

的结果相同的结果。

它返回一个表示2的数组

  1. 字符串的完整匹配
  2. 第一个捕获组中匹配的字符串

您可以通过

使其成为非捕获组

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

其中?:表示该组将不捕获

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

通过将Parens放在正则票据中,您要求返回匹配的字符串的一部分(在这种情况下恰好是相同的)。

所以,如果您的正则是这样:

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

您将返回3个字符串

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

最新更新