Javascript 正则表达式匹配缺少奇数索引
Javascript Regex match missing odd index
这段 Meteor 客户端代码使用正则表达式来匹配句子中的单词,它匹配得很好,但只匹配索引 0 和偶数索引。为什么它不匹配每个索引号?谢谢
let matches = '2006 BLUE TOYOTA COROLLA 120 SER SEDAN'.match(/[A-Z0-9]*/gi)
console.log('yr: ', matches[0]) //2006
console.log('color: ', matches[1]) // blank, why?
console.log('color?: ', matches[2]) //BLUE
console.log('make?: ', matches[3]) // blank, why?
console.log('make: ', matches[4]) //TOYOTA
console.log('modle: ', matches[6]) //COROLLA
})
发生这种情况是因为您使用 * 运算符而不是 +
它们之间的区别是:
* - 0 个或多个前面的表达式
+ - 1 个或多个前面的表达式
所以在你的情况下 * 运算符将这个空的 space 视为“0 或更多”并认为它是一个单独的元素,
您可能想要的表达式是:
let matches = '2006 BLUE TOYOTA COROLLA 120 SER SEDAN'.match(/[A-Z0-9]+/gi)
这段 Meteor 客户端代码使用正则表达式来匹配句子中的单词,它匹配得很好,但只匹配索引 0 和偶数索引。为什么它不匹配每个索引号?谢谢
let matches = '2006 BLUE TOYOTA COROLLA 120 SER SEDAN'.match(/[A-Z0-9]*/gi)
console.log('yr: ', matches[0]) //2006
console.log('color: ', matches[1]) // blank, why?
console.log('color?: ', matches[2]) //BLUE
console.log('make?: ', matches[3]) // blank, why?
console.log('make: ', matches[4]) //TOYOTA
console.log('modle: ', matches[6]) //COROLLA
})
发生这种情况是因为您使用 * 运算符而不是 + 它们之间的区别是:
* - 0 个或多个前面的表达式
+ - 1 个或多个前面的表达式
所以在你的情况下 * 运算符将这个空的 space 视为“0 或更多”并认为它是一个单独的元素, 您可能想要的表达式是:
let matches = '2006 BLUE TOYOTA COROLLA 120 SER SEDAN'.match(/[A-Z0-9]+/gi)