我想使用str_replace
或类似的替代方法来替换JavaScript中的一些文本。
var text = "this is some sample text that i want to replace";
var new_text = replace_in_javascript("want", "dont want", text);
document.write("new_text");
应该给出
this is some sample text that i dont want to replace
如果您要使用正则表达式,那么性能影响是什么? 与内置替代方法的比较。
答案 0 :(得分:194)
您可以使用replace
方法:
text = text.replace('old', 'new');
显然,第一个论点是你正在寻找的东西。它也可以接受正则表达式。
请记住它不更改原始字符串。它只返回新值。
答案 1 :(得分:82)
更简单:
city_name=city_name.replace(/ /gi,'_');
用'_'替换所有空格!
答案 2 :(得分:17)
所有这些方法都不会修改原始值,返回新的字符串。
var city_name = 'Some text with spaces';
用_
替换第一个空格city_name.replace(' ', '_'); // Returns: Some_text with spaces
使用正则表达式将所有空格替换为_。如果您需要使用正则表达式,那么我建议您使用https://regex101.com/
进行测试city_name.replace(/ /gi,'_'); // Returns: Some_text_with_spaces
将所有空格替换为_ 而不使用正则表达式。功能方式。
city_name.split(' ').join('_'); // Returns: Some_text_with_spaces
答案 3 :(得分:16)
你应该这样写:
var text = "this is some sample text that i want to replace";
var new_text = text.replace("want", "dont want");
document.write(new_text);
答案 4 :(得分:14)
该功能会替换仅发生一次 ..如果您需要替换 多次出现你应该尝试这个功能: http://phpjs.org/functions/str_replace:527
不一定。 看到Hans Kesting的回答:
city_name = city_name.replace(/ /gi,'_');
答案 5 :(得分:14)
其他人给你的代码只替换一次,而使用正则表达式替换它们(如@sorgit所说)。要用“不想要”替换所有“想要”,我们这个代码:
var text = "this is some sample text that i want to replace";
var new_text = text.replace(/want/g, "dont want");
document.write(new_text);
变量“new_text”将导致“这是我不想替换的一些示例文本”。
要获得正则表达式的快速指南,请转到此处:
http://www.cheatography.com/davechild/cheat-sheets/regular-expressions/
要了解有关str.replace()
的更多信息,请转到此处:
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/replace
祝你好运!
答案 6 :(得分:9)
使用正则表达式进行字符串替换比使用字符串替换要慢得多。
如on JSPerf所示,创建正则表达式可以具有不同的效率水平,但是它们都比简单的字符串替换要慢得多。 The regex is slower because:
固定字符串匹配没有回溯,编译步骤,范围,字符类或其他许多使正则表达式引擎变慢的功能。当然,有很多方法可以优化正则表达式匹配项,但在一般情况下,我认为将索引编入字符串是不太可能的。
为了在JS perf页面上运行一个简单的测试,我记录了一些结果:
<script>
// Setup
var startString = "xxxxxxxxxabcxxxxxxabcxx";
var endStringRegEx = undefined;
var endStringString = undefined;
var endStringRegExNewStr = undefined;
var endStringRegExNew = undefined;
var endStringStoredRegEx = undefined;
var re = new RegExp("abc", "g");
</script>
<script>
// Tests
endStringRegEx = startString.replace(/abc/g, "def") // Regex
endStringString = startString.replace("abc", "def", "g") // String
endStringRegExNewStr = startString.replace(new RegExp("abc", "g"), "def"); // New Regex String
endStringRegExNew = startString.replace(new RegExp(/abc/g), "def"); // New Regexp
endStringStoredRegEx = startString.replace(re, "def") // saved regex
</script>
Chrome 68的结果如下:
String replace: 9,936,093 operations/sec
Saved regex: 5,725,506 operations/sec
Regex: 5,529,504 operations/sec
New Regex String: 3,571,180 operations/sec
New Regex: 3,224,919 operations/sec
出于这个答案的完整性(从注释中借用),值得一提的是.replace
仅替换匹配字符的第一个实例。只能用//g
替换所有实例。如果替换多个实例name.replace(' ', '_').replace(' ', '_').replace(' ', '_');
或更糟糕的while (name.includes(' ')) { name = name.replace(' ', '_') }
答案 7 :(得分:8)
hm ..你检查了replace()吗?
您的代码将如下所示
var text = "this is some sample text that i want to replace";
var new_text = text.replace("want", "dont want");
document.write(new_text);
答案 8 :(得分:7)
在JavaScript中,您可以在String对象上调用replace
方法,例如"this is some sample text that i want to replace".replace("want", "dont want")
,它将返回被替换的字符串。
var text = "this is some sample text that i want to replace";
var new_text = text.replace("want", "dont want"); // new_text now stores the replaced string, leaving the original untouched
答案 9 :(得分:7)
JavaScript具有String对象的replace()
方法来替换子字符串。此方法可以有两个参数。第一个参数可以是字符串或正则表达式模式(regExp对象),第二个参数可以是字符串或函数。具有两个字符串参数的replace()
方法的示例如下所示。
var text = 'one, two, three, one, five, one';
var new_text = text.replace('one', 'ten');
console.log(new_text) //ten, two, three, one, five, one
请注意,如果第一个参数是字符串,则如上例所示,仅替换第一次出现的子字符串。要替换所有出现的子字符串,您需要提供带有g
(全局)标志的正则表达式。如果不提供全局标志,则即使您提供正则表达式作为第一个参数,也只会替换子字符串的第一个匹配项。因此,让我们替换上例中所有出现的one
。
var text = 'one, two, three, one, five, one';
var new_text = text.replace(/one/g, 'ten');
console.log(new_text) //ten, two, three, ten, five, ten
请注意,不要将正则表达式模式用引号引起来,这会使它成为不是regExp对象的字符串。要进行不区分大小写的替换,您需要提供附加标志i
,该标志使模式不区分大小写。在这种情况下,上述正则表达式将为/one/gi
。请注意,此处添加了i
标志。
如果第二个参数具有一个函数,并且存在匹配项,则该函数将与三个参数一起传递。函数获取的参数是匹配项,匹配项的位置和原始文本。您需要返回该匹配项应替换为的内容。例如,
var text = 'one, two, three, one, five, one';
var new_text = text.replace(/one/g, function(match, pos, text){
return 'ten';
});
console.log(new_text) //ten, two, three, ten, five, ten
您可以使用函数作为第二个参数来更好地控制替换文本。
答案 10 :(得分:7)
var new_text = text.replace("want", "dont want");
答案 11 :(得分:3)
如果您确实想要等同于PHP的str_replace
,则可以使用Locutus。 PHP的str_replace
版本比JavaScript String.prototype.replace
支持的版本更多。
例如标签:
//PHP
$bodytag = str_replace("%body%", "black", "<body text='%body%'>");
//JS with Locutus
var $bodytag = str_replace(['{body}', 'black', '<body text='{body}'>')
或数组的
//PHP
$vowels = array("a", "e", "i", "o", "u", "A", "E", "I", "O", "U");
$onlyconsonants = str_replace($vowels, "", "Hello World of PHP");
//JS with Locutus
var $vowels = ["a", "e", "i", "o", "u", "A", "E", "I", "O", "U"];
var $onlyconsonants = str_replace($vowels, "", "Hello World of PHP");
此外,它不使用正则表达式,而是用于循环。如果您不想使用正则表达式,但是想要简单的字符串替换,则可以使用类似这样的东西(基于Locutus)
function str_replace (search, replace, subject) {
var i = 0
var j = 0
var temp = ''
var repl = ''
var sl = 0
var fl = 0
var f = [].concat(search)
var r = [].concat(replace)
var s = subject
s = [].concat(s)
for (i = 0, sl = s.length; i < sl; i++) {
if (s[i] === '') {
continue
}
for (j = 0, fl = f.length; j < fl; j++) {
temp = s[i] + ''
repl = r[0]
s[i] = (temp).split(f[j]).join(repl)
if (typeof countObj !== 'undefined') {
countObj.value += ((temp.split(f[j])).length - 1)
}
}
}
return s[0]
}
var text = "this is some sample text that i want to replace";
var new_text = str_replace ("want", "dont want", text)
document.write(new_text)
有关更多信息,请参见源代码https://github.com/kvz/locutus/blob/master/src/php/strings/str_replace.js
答案 12 :(得分:3)
您可以使用
text.replace('old', 'new')
并一次更改一个字符串中的多个值,例如将#更改为字符串v,将_更改为字符串w:
text.replace(/#|_/g,function(match) {return (match=="#")? v: w;});
答案 13 :(得分:3)
使用str.replace()(对于这个问题足够公平)和regex
已经有多个答案,但是您可以将str.split()和join()结合使用,这样更快比str.replace()
和regex
。
下面是工作示例:
var text = "this is some sample text that i want to replace";
console.log(text.split("want").join("dont want"));
答案 14 :(得分:2)
在Javascript中,replace函数可用于用新字符串替换给定字符串中的子字符串。 使用:
var text = "this is some sample text that i want to replace";
var new_text = text.replace("want", "dont want");
console.log(new_text);
您甚至可以通过此函数使用正则表达式。例如,如果要用,
替换所有出现的.
。
var text = "123,123,123";
var new_text = text.replace(/,/g, ".");
console.log(new_text);
此处g
修饰符用于全局匹配所有可用的匹配项。
答案 15 :(得分:2)
使用React的replace substring in a sentence
方法:
const replace_in_javascript = (oldSubStr, newSubStr, sentence) => {
let newStr = "";
let i = 0;
sentence.split(" ").forEach(obj => {
if (obj.toUpperCase() === oldSubStr.toUpperCase()) {
newStr = i === 0 ? newSubStr : newStr + " " + newSubStr;
i = i + 1;
} else {
newStr = i === 0 ? obj : newStr + " " + obj;
i = i + 1;
}
});
return newStr;
};
答案 16 :(得分:2)
如果您不想使用正则表达式,则可以使用此函数来替换字符串中的所有字符
function ReplaceAll(mystring, search_word, replace_with)
{
while (mystring.includes(search_word))
{
mystring = mystring.replace(search_word, replace_with);
}
return mystring;
}
var mystring = ReplaceAll("Test Test", "Test", "Hello");
答案 17 :(得分:2)
您有以下选择:
var text = "this is some sample text that i want to replace and this i WANT to replace as well.";
var new_text = text.replace('want', 'dont want');
// new_text is "this is some sample text that i dont want to replace and this i WANT to replace as well"
console.log(new_text)
var text = "this is some sample text that i want to replace and this i WANT to replace as well.";
var new_text = text.replace(/want/g, 'dont want');
// new_text is "this is some sample text that i dont want to replace and this i WANT to replace as well
console.log(new_text)
var text = "this is some sample text that i want to replace and this i WANT to replace as well.";
var new_text = text.replace(/want/gi, 'dont want');
// new_text is "this is some sample text that i dont want to replace and this i dont want to replace as well
console.log(new_text)
更多信息-> here
答案 18 :(得分:2)
使用JS String.prototype.replace
的第一个参数应为Regex模式或String,第二个参数应为String或函数。
str.replace(regexp|substr, newSubStr|function);
例如:
var str = 'this is some sample text that i want to replace';
var newstr = str.replace(/want/i, "dont't want");
document.write(newstr); // this is some sample text that i don't want to replace
答案 19 :(得分:1)
即使输入模式是字符串,也试图提供完整的替换选项。
const str = "Backbencher sits at the Back";
const newStr = str.replaceAll("Back", "Front");
console.log(newStr); // "Frontbencher sits at the Front"
const str = "Backbencher sits at the Back";
const newStr = str.replace(/Back/g, "Front");
console.log(newStr); // "Frontbencher sits at the Front"
如果输入模式是字符串,replace()
方法只替换第一次出现。
const str = "Backbencher sits at the Back";
const newStr = str.replace("Back", "Front");
console.log(newStr); // "Frontbencher sits at the Back"
答案 20 :(得分:0)
function str_replace($old, $new, $text)
{
return ($text+"").split($old).join($new);
}
您不需要其他库。
答案 21 :(得分:0)
在ECMAScript 2021中,可以使用replaceAll
。
const str = "string1 string1 string1"
const newStr = str.replaceAll("string1", "string2");
console.log(newStr)
// "string2 string2 string2"
答案 22 :(得分:0)
最简单的形式如下
如果你只需要替换第一次出现
var newString = oldStr.replace('want', 'dont want');
如果你不想全部发生
var newString = oldStr.replace(want/g, 'dont want');
答案 23 :(得分:-1)
添加了一种方法replace_in_javascript
,它将满足您的要求。还发现您正在"new_text"
中写一个字符串document.write()
,该字符串应该引用变量new_text
。
let replace_in_javascript= (replaceble, replaceTo, text) => {
return text.replace(replaceble, replaceTo)
}
var text = "this is some sample text that i want to replace";
var new_text = replace_in_javascript("want", "dont want", text);
document.write(new_text);