JavaScript RegExp:匹配,但不要't捕获
JavaScript RegExp: match, but don't capture
SO上有一千个正则表达式问题,如果已经涉及到了,我很抱歉。我确实先看了看。
给定以下模式:
(?:/|-)[0-9]{2}$
以及以下字符串:
str1 = '65/65/65'
str2 = '65/65/6565'
匹配项为:
str1 = '/65' // expected '65'
str2 = '' // as I expected
我对的意图?:是匹配的,但不包括/或-。满足我期望的正确正则表达式是什么?
由于Javascript中没有后备功能,只需将所需的部分封装到一个捕获组中即可:
var str = '65/66/67';
if(res = str.match(/(?:'/|-)([0-9]{2})$/)) {
console.log(res[1]);
}
参见小提琴
注意:(?:'/|-)
可以替换为字符类['/-]
,如@anubhava所评论的。
通常情况下,这将通过一个后备:来完成
/(?<=[-'/])[0-9]{2}$/
遗憾的是,JavaScript不支持这些功能。
相反,由于您知道"额外位"的长度(即一个字符,-
或/
),因此它应该足够简单,只需.substr(1)
即可。
没有后备,但有排他性匹配(?:
),因为它不会失败。问题是,它将作为整体匹配的一部分(结果的索引0
)。因此,最好的选择是捕获你想要的部分。在您的示例中,这可以通过将匹配的数字括在括号中来完成。
var re = /(?:[/-])([0-9]{2})$/,
str1 = '12/34/56',
str2 = '12/34/5678';
var res1 = str1.match(re); // will want to use res1[1], not res1[0]
var res2 = str2.match(re); // null returned
相关文章:
- 使用Express捕获参数
- 为什么会出现错误;未捕获的类型错误:undefined不是函数;
- 同样,同样的错误'ahorcado.js:26未捕获类型错误:无法读取属性'beginPath'
- 同位素库错误:未捕获错误无布局模式包装生产线8
- 未捕获的TypeError无法读取未定义的属性socialsharing
- 在javascript regexp中捕获多个变量的一种更简单的方法
- RegExp在parens中捕获字符串时未按预期工作
- JS RegExp 捕获括号
- Regexp:只捕获括号内的内容
- JavaScript RegExp:匹配,但不要't捕获
- 使用RegExp捕获URL的可选部分
- Regexp,括号之间的捕获,javascript
- 使用RegExp递归地检索多个捕获组
- NodeJS RegExp非捕获组不像预期的那样工作
- Javascript对捕获的regexp执行算术
- RegExp捕获组中的捕获组
- 未捕获的SyntaxError:提供给RegExp构造函数的无效标志'usuario'
- Javascript regexp捕获由字符分隔的匹配项
- Javascript中的RegExp捕获
- 未捕获的SyntaxError:提供给RegExp构造函数的无效标志''