我有一个正则表达式在regex101中正常工作,但在javascript / jquery中没有,我认为是因为?<=
表达式。如果我省略这部分,它可以工作,但也替换前面的字符串。我想只替换URL中的数字,换句话说,只替换“foo /”和“/ bar”之间的所有数字
我的代码:
<a id="link" href="http://www.domain.com/foo/1234/bar/">Some anchor text</a>
<button>Click</button>
$("button").click(function() {
$('#link').attr('href', function(index, myhref) {
return myhref.replace(/(?<=foo\/)(\d+)(?=\/bar)/,'newnumber');
});
});
如何修改我的正则表达式以替换数字?
答案 0 :(得分:1)
正确,这是因为JavaScript不支持后视。相反,您可以使用包含前缀和后缀的输出字符串:
return myhref.replace(/foo\/\d+\/bar/,'foo/newnumber/bar');
如果newnumber
是变量,请使用连接:
return myhref.replace(/foo\/\d+\/bar/,'foo/' + newnumber + '/bar');
答案 1 :(得分:1)
JavaScript不支持正面或负面的外观。但是,您可能希望尝试捕获其组并在替换字符串时使用它们。
<强> E.g 强>
var str = 'http://www.domain.com/foo/1234/bar/';
var myvar = 'newnumber';
var newStr = str.replace(/(foo\/)(\d+)(\/bar)/i, '$1' + myvar + '$3');
// Returns "http://www.domain.com/foo/newnumber/bar/"
(foo\/)
是第一个匹配foo/
(\d+)
是第二组,匹配任意一个或多个数字。(\/bar)
是第三组,匹配/bar
'$1'+ myvar +'$3'
返回first group
+ myvar
+ third group
答案 2 :(得分:0)
你可以使用:
myhref.replace(new RegExp("\/[0-9]*\/", "g"), "/newnumber/")
编辑:如果你想用&#34; newnumber&#34;替换号码?只有当它在 foo 和 bar 之间时,你应该在RegExp和以下添加它们。上面的代码将替换数字而不用验证它。
myhref.replace(new RegExp("foo\/[0-9]*\/bar", "g"), "foo/newnumber/bar")
答案 3 :(得分:0)
您可以使用RegExp
与/\d+/
.replace()
匹配字符串中的数字,newnumber
匹配的数字与var str = "http://www.domain.com/foo/1234/bar/";
var newnumber = 5678;
var n = str.match(/\d+/)[0];
str = str.replace(n, newnumber);
yearmon