gpt4 book ai didi

javascript - String.Replace 仅替换第一次出现的匹配字符串。如何替换*所有*事件?

转载 作者:IT王子 更新时间:2023-10-29 03:15:52 26 4
gpt4 key购买 nike

来自其他编程语言的 String.replace() 通常会替换所有出现的匹配字符串。但是,javascript/typescript 并非如此。我在网上找到了一些使用正则表达式的 javascript 解决方案。由于特殊字符,我立即对这个解决方案产生了疑问。我怀疑有一种方法可以用正则表达式来纠正这个问题,但我不是正则表达式专家。正如我之前的许多人所做的那样,我创建了自己的方法。

也许有一些方法可以通过使用自定义 StringBuilder() 类来提高性能。我欢迎任何想法。

public static Replace = function (originalString: string, oldValue: string, newValue: string, ignoreCase: boolean = false) {
//
// if invalid data, return the original string
//
if ((originalString == null) || (oldValue == null) || (newValue == null) || (oldValue.length == 0) )
return (originalString);
//
// do text replacement
//
var dest = "";
var source: string = originalString;
if (ignoreCase)
{
source = source.toLocaleLowerCase();
oldValue = oldValue.toLowerCase();
}
//
// find first match
//
var StartPos = 0;
var EndPos = source.indexOf(oldValue, StartPos);
var Skip = (EndPos >= 0) ? EndPos - StartPos : source.length-StartPos;
//
// while we found a matched string
//
while (EndPos > -1) {
//
// copy original string skipped segment
//
if (Skip > 0) dest += originalString.substr(StartPos, Skip);
//
// copy new value
//
dest += newValue;
//
// skip over old value
//
StartPos = EndPos + oldValue.length;
//
// find next match
//
EndPos = source.indexOf(oldValue, StartPos);
Skip = (EndPos >= 0) ? EndPos - StartPos : source.length - StartPos;
}
//
// append the last skipped string segment from original string
//
if (Skip > 0) dest += originalString.substr(StartPos, Skip);

return dest;
}

为了向 string 类添加对该方法的支持,我添加了以下代码:

interface String { EZReplace(oldValue: string, newValue: string, ignorCase?: boolean): string; }

String.prototype.EZReplace = function (oldValue: string, newValue: string, ignorCase: boolean = false) {
return EZUtil.Replace(this, oldValue, newValue, ignorCase);}

....在重新查看其他帖子后,我修改了代码以使用正则表达式。执行性能测试会很有趣。

 public static Replace = function (originalString: string, oldValue: string, newValue: string, ignoreCase: boolean = false) {
//
// if invalid data, return the original string
//
if ((originalString == null) || (oldValue == null) || (newValue == null) || (oldValue.length == 0))
return (originalString);
//
// set search/replace flags
//
var Flags: string = (ignoreCase) ? "gi" : "g";
//
// apply regex escape sequence on pattern (oldValue)
//
var pattern = oldValue.replace(/[-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
//
// replace oldValue with newValue
//
var str = originalString.replace(new RegExp(pattern, Flags), newValue);
return (str);
}

最佳答案

In typescript, String.Replace only replaces first occurrence of matched string. Need String.replaceAll() method

这里的 TypeScript 没有什么特别之处 ( after all TypeScript is just JavaScript with type annotations )。 JavaScript string.replace 仅在给定字符串时替换第一个实例。获得全部替换的唯一方法是使用带有 /g 修饰符的 regex

或者我只是这样做:

somestring.split('oldString').join('newString');

关于javascript - String.Replace 仅替换第一次出现的匹配字符串。如何替换*所有*事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37197311/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com