繁体   English   中英

正则表达式匹配两个字符串之间的数字不适用于JS

[英]Regex match digits between two strings not working in JS

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

我该如何修改我的正则表达式,使其替换数字?

正确,这是因为JavaScript不支持回溯。 相反,您可以使用包含前缀和后缀的输出字符串:

return myhref.replace(/foo\/\d+\/bar/,'foo/newnumber/bar');

如果newnumber是变量,请使用串联:

return myhref.replace(/foo\/\d+\/bar/,'foo/' + newnumber + '/bar');

JavaScript不支持正向或负向后退。 但是,您可能想尝试捕获其组并在替换字符串时使用它们。

例如

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

您可以使用:

myhref.replace(new RegExp("\/[0-9]*\/", "g"), "/newnumber/")

编辑:如果仅当它在foobar之间时,如果要用“ newnumber”替换数字,则应在RegExp处添加它们,如下所示。 上面的代码将替换数字而不进行验证。

myhref.replace(new RegExp("foo\/[0-9]*\/bar", "g"), "foo/newnumber/bar")

您可以将.match()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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM