正则里的match不能与(?:)一起用吗?

某一个字符串为'a_b_2_d_1'

我想匹配到_后面的字母与数字,但是不匹配_,

于是我写了:


let str = "a_b_2_d_1"

let result = str.match(/(?:_)[a-z0-9]+/gi);

console.log(result); //["_b", "_2", "_d", "_1"]

结果将_也匹配了进去,match是与(?:)不生效呢,还是为什么。

如果不用这种方式还能怎么写呢?


喵喔喔
浏览 351回答 1
1回答

Helenr

你可以去查下match的用法,match根据正则表达式里面有没有全局匹配g,会返回不同的结果,如果不是全局匹配,那么返回的结果是数组,第一个元素是匹配的完整字符串,从第二个元素开始是捕获型括号的内容;如果是全局匹配,返回的结果是一个数组,数组的每个元素都是匹配的完整字符串,没有捕获型括号的内容。使用exec,代码如下:let str = "a_b_2_d_1"let re = /(?:_)([a-z0-9]+)/gilet matchlet result = []while (match = re.exec(str)) {    result.push(match[1])}console.log(result)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript