如何在JavaScript中执行str_replace,替换JavaScript中的文本?

Vis*_*ish 133 javascript replace str-replace

我想使用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");
Run Code Online (Sandbox Code Playgroud)

应该给

this is some sample text that i dont want to replace
Run Code Online (Sandbox Code Playgroud)

如果您要使用正则表达式,与内置替换方法相比,性能影响是什么.

sdl*_*rhc 198

你会使用这个replace方法:

text = text.replace('old', 'new');
Run Code Online (Sandbox Code Playgroud)

显然,第一个论点是你正在寻找的东西.它也可以接受正则表达式.

请记住,它并不会改变原来的字符串.它只返回新值.

  • string.replace('old','new')只会替换字符串中第一个'old'实例.使用带有'g'标志的正则表达式就像在realmag777中的答案一样,将替换字符串的所有实例.text = text.replace(/ old/g,'new')将替换'old'的所有实例 (68认同)
  • ^ text.replace(/ old/gi,'new')将替换'new'的所有'old'实例,不区分大小写(例如'OLD'和'oLd'也将被替换) (6认同)
  • 非常感谢'它只会返回并且不会改变'!这就是我长时间撕裂我的头发直到我看到你的评论... (4认同)
  • 和一些文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace (2认同)

rea*_*777 83

更简单:

city_name=city_name.replace(/ /gi,'_');
Run Code Online (Sandbox Code Playgroud)

用'_'替换所有空格!

  • 这是"str_replace"所做的(全局)更准确的翻译.所选答案只会取代第一个案例. (9认同)

Luk*_*kas 18

所有这些方法都不会修改原始值,返回新的字符串.

var city_name = 'Some text with spaces';
Run Code Online (Sandbox Code Playgroud)

用_ 替换第一个空格

city_name.replace(' ', '_'); // Returns: Some_text with spaces
Run Code Online (Sandbox Code Playgroud)

使用正则表达式用_ 替换所有空格.如果您需要使用正则表达式,那么我建议您使用https://regex101.com/进行测试

city_name.replace(/ /gi,'_');  // Returns: Some_text_with_spaces 
Run Code Online (Sandbox Code Playgroud)

用_ 而不是正则表达式替换所有空格.功能方式.

city_name.split(' ').join('_');  // Returns: Some_text_with_spaces
Run Code Online (Sandbox Code Playgroud)


Tim*_*. Z 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);
Run Code Online (Sandbox Code Playgroud)


Pav*_*vel 14

该函数替换一次出现..如果你需要替换多次出现,你应该尝试这个函数:http://phpjs.org/functions/str_replace: 527

不必要.看到Hans Kesting的回答:

city_name = city_name.replace(/ /gi,'_');
Run Code Online (Sandbox Code Playgroud)


Zoy*_*oyt 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);
Run Code Online (Sandbox Code Playgroud)

变量"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
祝你好运!


The*_*tan 10

使用正则表达式替换字符串比使用字符串替换要慢得多.
正如在JSPerf上所展示的那样,创建正则表达式可以有不同的效率级别,但是它们都比简单的字符串替换慢得多.正则表达式较慢,因为:

固定字符串匹配没有回溯,编译步骤,范围,字符类或许多其他功能,这些功能会降低正则表达式引擎的速度.当然有一些方法可以优化正则表达式匹配,但我认为在常见情况下不太可能将索引编入字符串.

对于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>
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

从这个答案的完整性(借鉴评论)开始,值得一提的是.replace只能替换匹配字符的第一个实例.它唯一可以替换所有实例//g.如果替换多个实例name.replace(' ', '_').replace(' ', '_').replace(' ', '_');或更糟糕的话,性能权衡和代码优雅可能会更糟while (name.includes(' ')) { name = name.replace(' ', '_') }


arb*_*ero 8

嗯..你检查了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);
Run Code Online (Sandbox Code Playgroud)


Tow*_*own 7

var new_text = text.replace("want", "dont want");
Run Code Online (Sandbox Code Playgroud)


小智 7

在JavaScript中,您可以replace在String对象上调用该方法,例如"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
Run Code Online (Sandbox Code Playgroud)


Sar*_*ral 7

JavaScript具有replace()String对象的方法来替换子串.此方法可以有两个参数.第一个参数可以是字符串或正则表达式模式(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
Run Code Online (Sandbox Code Playgroud)

请注意,如果第一个参数是字符串,则仅替换第一次出现的子字符串,如上例所示.要替换所有出现的子字符串,您需要提供带有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
Run Code Online (Sandbox Code Playgroud)

请注意,您不要将正则表达式模式包装在引号中,这将使其成为字符串而不是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
Run Code Online (Sandbox Code Playgroud)

您可以使用函数作为第二个参数,对替换文本进行更多控制.

  • 你是唯一提到替换功能的人 (2认同)