我希望对字符串中的数字进行操作,但操作取决于该数字之前的字符,因此我需要在字符串中的任何数字之前获得char。备注表示,数字之前的字符可以是另一个数字。
到目前为止,我已经完成了/(.)[0-9]/g
,但这与在另一个数字之前有一个数字的情况不匹配。例如:
positions: 0123456789012
string: a a4 bb4 c44c
比赛:
a4
2-3b4
5-6c4
9-10与44
10-11不匹配
我怎么才能配得上这个呢?
发布于 2016-08-16 10:56:58
您可以使用一个简单得多的正则表达式:
/(?=(.[0-9]))./g
此正则表达式匹配除换行符和回车(.
)以外的任何字符,后者是LF/CR以外的任何字符,后面跟着一个数字。
此模式与空字符串不匹配,并且不需要额外的代码来检查是否匹配空字符串(比如anubhava的答案中的if (m.index === re.lastIndex) re.lastIndex++;
,即使在该解决方案中也是多余的,这样就可以避免连接捕获的组值)。
实际值存储在捕获组1中,该组位于正前瞻中,以允许获得重叠匹配。因为如果我们使用str.match(re)
,捕获就会丢失,所以我们必须依赖循环中的RegExp#exec
。
var re = /(?=(.[0-9]))./g;
var str = 'a a4 bb4 c44c';
var res = [];
while((m=re.exec(str)) !== null) {
res.push(m[1]);
}
console.log(res);
发布于 2016-08-16 10:38:36
您可以对两个捕获的组使用此正则表达式:
/(.)(?=([0-9]))/g
并将捕获的组#1和#2连接起来,以获得结果。
var re = /(.)(?=([0-9]))/g;
var str = 'a a4 bb4 c44c';
var m;
var results = [];
while ((m = re.exec(str)) !== null) {
if (m.index === re.lastIndex)
re.lastIndex++;
results.push(m[1] + m[2]);
}
console.log(results);
//=> ["a4", "b4", "c4", "44"]
https://stackoverflow.com/questions/38972622
复制相似问题