我无法理解为什么此代码段返回两个字符串"轴承"而不是仅仅弦乐"轴承"的数组。任何想法?
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的数组
- 字符串的完整匹配
- 第一个捕获组中匹配的字符串
您可以通过
使其成为非捕获组
const cleanedString = "ANGULAR CONTACT (ROLLING) BEARING"
const noun = cleanedString.match(/b(?:w+)$/);
console.log(noun);
其中?:表示该组将不捕获
默认匹配返回与第一个值匹配的字符串。
通过将Parens放在正则票据中,您要求返回匹配的字符串的一部分(在这种情况下恰好是相同的)。
所以,如果您的正则是这样:
/^(w+).*b(w+)$/
您将返回3个字符串
- 整个字符串
- Angular
- 轴承