你怎么改变这个:
a-10-b-19-c
这样的事情:
a-10-b-20-c
在Javascript中使用正则表达式?
它也应该改变这个:
a-10-b-19
进入这个:
a-10-b-20
到目前为止我找到的唯一解决方案是:
"c-91-b-01-a"
\d+
) - > "91"
"19"
19
20
"20"
"02"
"c-02-b-01-a"
"a-10-b-20-c"
我希望有人可以用更简单的方式做到这一点......任何人?
答案 0 :(得分:4)
这是一种简单的方法。
var str = 'a-10-b-19-c';
str = str.replace(/(\d*)(?=(\D*)?$)/, +str.match(/(\d*)(?=(\D*)?$)/)[0]+1);
+str.match
找到19,将其加1并返回20. +
确保答案为int。 str.replace
找到19并将其替换为str.match
返回的20。
解释
(\d*)
- 匹配任何数字(?=...)
- 积极前瞻,不会改变正则表达式的位置,但会确保该模式在线下进一步存在。(\D*)?$
- 它不必,但可以匹配多次不是数字的任何内容,然后匹配字符串的结尾答案 1 :(得分:1)
//replaces last digit sequences with 20
'a-10-b-19-c'.replace(/\d+(?!.*\d+)/, '20')
/
- >正则表达式的开始
\d+
- >匹配任何数字(一个或多个)
(?!.*\d+)
- >负向前看断言我们找不到任何未来(一个或多个)数字
/
- >正则表达式结束
编辑:重新阅读添加,
可以使用匹配,例如:
var m ='a-10-b-19-c'.match(/\d+(?!.*\d+)/);
'a-10-b-19-c'.replace(/\d+(?!.*\d+)/, parseInt(m[0]) + 1);
答案 2 :(得分:1)
这是一个更简单的一个:
str.replace(/(.*\D)(\d+)/, function(s, pfx, n) {return pfx + ((+n) + 1)})
或
str.replace(/.*\D(\d+)/, function(s, n) {return s.slice(0, -n.length) + ((+n) + 1)})
如果数字是字符串中的第一个,那么这些都不会起作用,但是这个会:
(' ' + str).replace(/.*\D(\d+)/,
function(s, n) {
return s.slice(1, -n.length) + ((+n) + 1)
})
(为什么Javascript需要三个不同的子字符串函数?)
答案 3 :(得分:0)
这是我能想到的最简单的方法:
var str = 'a-10-b-19-c';
var arr = str.split('-');
arr[3] = parseInt(arr[3]) + 1;
str = arr.join('-');
编辑解释:
split()
方法接受参数(在本例中为连字符),并在找到的每个实例中将其分解为数组。如果您在此部分运行后在JavaScript控制台中输入arr
,则会获得["a", "10", "b", "19", "c"]
我们知道我们需要在这里更改第4项,索引3通过arr[3]
访问。这个数组的每一部分都是一个字符串。如果您尝试将字符串递增1,它将简单地将字符串与1连接(JS使用+
进行添加和连接),因此您需要先使用parseInt()
使其成为整数另外。
然后我们使用join()
方法将数组粘合在一起形成一个字符串!
答案 4 :(得分:0)
试试这个:
var str='a-10-b-19-c';
var pattern=/\d+/g;
var matches=pattern.exec(str);
var last=matches[0];
while((matches=pattern.exec(str))!=null)
{
last=matches[0];
}
var newStr=str.replace(last, parseInt(last)+1);
console.log(newStr);
代码输出a-10-b-20-c