GVKun编程网logo

为什么javascript在使用replace时只替换第一个实例?(js replace只能替换一个)

23

在这篇文章中,我们将为您详细介绍为什么javascript在使用replace时只替换第一个实例?的内容,并且讨论关于jsreplace只能替换一个的相关问题。此外,我们还会涉及一些关于javascr

在这篇文章中,我们将为您详细介绍为什么javascript在使用replace时只替换第一个实例?的内容,并且讨论关于js replace只能替换一个的相关问题。此外,我们还会涉及一些关于javascript - 正则替换replace中$1的用法、JavaScript .replace 仅替换第一个 Match、JavaScript .replace只替换第一个Match、javascript replace()正则替换实现代码的知识,以帮助您更全面地了解这个主题。

本文目录一览:

为什么javascript在使用replace时只替换第一个实例?(js replace只能替换一个)

为什么javascript在使用replace时只替换第一个实例?(js replace只能替换一个)

我有这个

 var date = $(''#Date'').val();

这将获取文本框中的值看起来像这样

2009 年 12 月 31 日

现在我这样做

var id = ''c_'' + date.replace("/", '''');

结果是

c_1231/2009

它错过了最后一个’/’我不明白为什么。

答案1

小编典典

您需要设置 g
标志以全局替换:

date.replace(new RegExp("/", "g"), '''')// ordate.replace(/\//g, '''')

否则只会替换第一个匹配项。

javascript - 正则替换replace中$1的用法

javascript - 正则替换replace中$1的用法

preg_replace("/([&?]uid=)[^?&]*/",''$1173'',''http://localhost/mobile/index.php?c=wish&uid=181'')

//输出:http://localhost/mobile/index.php?c=wish73
登录后复制
登录后复制

如上面$replacement ($1173)表示的,php以为我要把$11加上73,但其实我是想让 $1加上173,请问怎样改才能符合我的预期?

刚刚在写问题的时候突然想到把$replacement改成$01说不定可以,没想到真可以了,现在是这样''$01173''

另外,同样的$replacement($1173)放到js里表现的结果却是我预期的,那js里想要$11加上73怎么办?

回复内容:

preg_replace("/([&?]uid=)[^?&]*/",''$1173'',''http://localhost/mobile/index.php?c=wish&uid=181'')

//输出:http://localhost/mobile/index.php?c=wish73
登录后复制
登录后复制

如上面$replacement ($1173)表示的,php以为我要把$11加上73,但其实我是想让 $1加上173,请问怎样改才能符合我的预期?

刚刚在写问题的时候突然想到把$replacement改成$01说不定可以,没想到真可以了,现在是这样''$01173''

另外,同样的$replacement($1173)放到js里表现的结果却是我预期的,那js里想要$11加上73怎么办?

试试$01173?

立即学习“Java免费学习笔记(深入)”;

JS只是比较智能一点,它发现你的正则里面没有11个分组,所以会把$1173拆分为$1和173两个部分。但是当分组数量达到11个以上时它也就会以能够匹配到的最大的分组来替换了,比如:

''abcdefffgg''.replace(/(f+)fgg/, ''$1173''); // abcdeff173,(替换的是第1个分组,ff)
''abcdefffgg''.replace(
    /(f+)(a?)(a?)(a?)(a?)(a?)(a?)(a?)(a?)(a?)(fgg)/,
    ''$1173''); // abcdefgg73(替换的是第11个分组,fgg)
登录后复制

要想在上面的第二个例子里替换第一个分组,可以用$01173,由于分组最大只能到99,而01已经满了2位数,所以JS不会再去尝试检查第三位数。你可以在PHP里试试这种方法,我没测试,不知道可不可行。

至于你说的,想让JS在不足11个分组的时候匹配$11应该是做不到的。

在replace第二个参数里面$实际上是告诉正则表达式引擎,接下来的是一个反向引用(有的语言或工具里面也用\标识),是对正则表达式中匹配出来的组的引用,在你的例子里面就是 ([&?]uid=)所匹配出来的内容。

我对PHP不是很熟。
回答你的javascript的问题,在js里面$1代表的第一个被匹配到的group。所以结果是正确。

如果你想要$11这个字符串的加上73的话,用这个就可以了$$1173

详细说明可参照这里:http://deerchao.net/tutorials/regex/regex.htm#backreference

JavaScript .replace 仅替换第一个 Match

JavaScript .replace 仅替换第一个 Match

var textTitle = “this is a test”
var result = textTitle.replace(‘ ‘,‘%20’);

但是替换功能在“”的第一个实例处停止,我得到了

结果 :"this%20is a test"

关于我哪里出错的任何想法,我确信它是一个简单的修复。

JavaScript .replace只替换第一个Match

JavaScript .replace只替换第一个Match

var textTitle = “this is a test”
var result = textTitle.replace(‘ ‘, ‘%20’);

但是替换功能在“”的第一个实例处停止,我得到了

结果: "this%20is a test"

任何关于我哪里出问题的想法都确保它很简单。

答案1

小编典典

您需要/g在那里,像这样:

var textTitle = "this is a test";var result = textTitle.replace(/ /g, ''%20'');console.log(result);

javascript replace()正则替换实现代码

javascript replace()正则替换实现代码

复制代码 代码如下:

var data = "123123,213,<,12312,>,312,3,cat,dsfsdfs,";
alert(func(data));
function func(str)
{
var reg = /<|>/g;
str = str.replace(reg,function($1){
if($1=='<'){
return '<';
}else{
return '>';
}
});
return str;
}

很基础...能举一反三最好.

我们今天的关于为什么javascript在使用replace时只替换第一个实例?js replace只能替换一个的分享就到这里,谢谢您的阅读,如果想了解更多关于javascript - 正则替换replace中$1的用法、JavaScript .replace 仅替换第一个 Match、JavaScript .replace只替换第一个Match、javascript replace()正则替换实现代码的相关信息,可以在本站进行搜索。

本文标签:

上一篇使用 Enumerable.Empty 更好吗() 与新列表相对() 初始化一个 IEnumerable?(使用初始化列表可以更高效的构造对象)

下一篇MVC 和 Razor 中 Html.TextboxFor 和 Html.EditorFor 的区别(razorpage和mvc)