如题:我想要实现的功能是替换stock(1000, 1),将1000替换成其他内容。
最开始我写的正则表达式是
var reg = /(?=stock\()(\d+)/;
var str = 'stock(1000,10)';
str.replace(reg, 999);
但是其实str.match(reg)却返回null
还请各位大佬们指点
最开始我写的正则表达式是
var reg = /(?=stock\()(\d+)/;
var str = 'stock(1000,10)';
str.replace(reg, 999);
但是其实str.match(reg)却返回null
还请各位大佬们指点
var reg = /stock\((\d+)/;
var str = 'stock(1000,10)';
str.replace(reg, 'stock(' + 999);
/*
据我所知,无法直接替换分组的内容
换种思路,既然你不喜欢我,我就去匹配你的闺蜜,这样组成新的一对。
*/
var str = 'stock(1000, 1)';
var reg = /(stock\()[^,]+/g;
str.replace(reg, '$1999');
/*
这样既保证内容的准确性又能解决问题,
需要注意的是 [^,]+ 意思是除了,都匹配,
也就是,前面的1000,
而 '$1999' 代表旁边的字符$1组合新的字符999
*/
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
js正则目前只支持先行断言
/d(?=exp)/
// 匹配1exp,返回1
匹配exp前面的内容,exp不计入返回结果.
目前es6有个提案,js支持后行断言(es6入门中是这样写的:)刚刚在谷歌浏览器试了下,发现并不能用)
如果支持,可以这样写
V8 引擎4.9版已经支持。
如果不支持,只能先匹配到(1000,将其替换为(999
参考链接:
http://es6.ruanyifeng.com/#do...后行断言
补充:
你说str.match(reg)返回null
/\((\d+),/
表示,匹配(和,之间的数字,用括号将\d+
括起来,表示将多个连续的数字提取出来.再补充下
上面说,用括号,可以将正则表达式匹配的内容分组,那么你想要实现的效果,可以这样写
上面的正则是这样的,匹配(和,之间的数字,并且
,
不计入返回结果.将(
作为一个分组,在replace的第二个参数中引用,$1
表示引用正则匹配的第2个分组(从0开始,所以是$1)此贴终结,哈哈哈