正则表达式匹配两个不在JS中的字符串之间的数字

时间:2016-05-24 00:43:44

标签: javascript regex

我有一个正则表达式在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');
   });
});

如何修改我的正则表达式以替换数字?

4 个答案:

答案 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
相关问题