Javascript 如何替换特定范围内的字符串?

Javascript 如何替换特定范围内的字符串?,javascript,jquery,regex,string,Javascript,Jquery,Regex,String,我有这样一个字符串: var str = "this is a string"; str.replace(/\n/g, " "); str.replace_range(/\n/g, 5, 8); 我还有一个类似这样的正则表达式: var str = "this is a string"; str.replace(/\n/g, " "); str.repla

我有这样一个字符串:

var str = "this
           is
           a
           string";
str.replace(/\n/g, " ");
str.replace_range(/\n/g, 5, 8);
我还有一个类似这样的正则表达式:

var str = "this
           is
           a
           string";
str.replace(/\n/g, " ");
str.replace_range(/\n/g, 5, 8);
上述代码将正则表达式应用于所有字符串,输出如下:

output: // this is a string
虽然我想在这个范围内应用它:
[5,8]
。换句话说,我想要这个输出:

what I want: /* this
                is a
                string
             */

我该怎么做呢?

我假设
[5,8]
范围是包含在内的

var str = "this\nis\na\nstring";
str = str.substring(0, 5) + str.substring(5, 9).replace(/\n/g, " ") + str.substring(9);
请注意,
str.substring
的第二个参数是不包含的第一个索引,而不是要包含的最后一个数字

更一般地说。对于任何第一个包含的字符编号
i_start
和最后一个包含的字符编号
i_end

def replace_part(str, regex, i_start=0, i_end):
    return str.substring(0, i_start) + str.substring(i_start, i_end + 1).replace(regex, " ") + (typeof i_end === 'undefined' ? '' : str.substring(i_end));

我已经包含了未定义的检查,这样,如果您只想在
I\u start
之后保留整个字符串,就可以省略
I\u end
,我假设
[5,8]
范围是包含的

var str = "this\nis\na\nstring";
str = str.substring(0, 5) + str.substring(5, 9).replace(/\n/g, " ") + str.substring(9);
请注意,
str.substring
的第二个参数是不包含的第一个索引,而不是要包含的最后一个数字

更一般地说。对于任何第一个包含的字符编号
i_start
和最后一个包含的字符编号
i_end

def replace_part(str, regex, i_start=0, i_end):
    return str.substring(0, i_start) + str.substring(i_start, i_end + 1).replace(regex, " ") + (typeof i_end === 'undefined' ? '' : str.substring(i_end));

我已经包含了未定义的检查,这样您就可以省略
I\u end
,如果您只想在
I\u start
之后保留整个字符串,根据Pi Marillion的回答,这也可以:

String.prototype.replace_range=function(regex, i_start, i_end){
    return this.substring(0, i_start) + this.substring(i_start, i_end + 1).replace(regex, " ") + (typeof i_end === 'undefined' ? '' : this.substring(i_end));
}
然后你可以这样使用它:

var str = "this
           is
           a
           string";
str.replace(/\n/g, " ");
str.replace_range(/\n/g, 5, 8);

根据Pi Marillion的回答,这也可以:

String.prototype.replace_range=function(regex, i_start, i_end){
    return this.substring(0, i_start) + this.substring(i_start, i_end + 1).replace(regex, " ") + (typeof i_end === 'undefined' ? '' : this.substring(i_end));
}
然后你可以这样使用它:

var str = "this
           is
           a
           string";
str.replace(/\n/g, " ");
str.replace_range(/\n/g, 5, 8);

您应该在
字符串中使用回调函数。同时替换

var str=“this\nis\na\nstring”;

警报(str.replace(/^([\s\s]{5})([\s\s]{3})/,函数(x,y,z){返回y+z.replace(/\n/,''))
您应该在
字符串中使用回调函数。replace
也可以

var str=“this\nis\na\nstring”;

警报(str.replace(/^([\s\s]{5})([\s\s]{3})/,函数(x,y,z){返回y+z.replace(/\n/,'')})
很好,但是您能告诉我如何为
[x,y]
做到这一点吗?因为
[5,8]
只是一个例子。。。(也是的,该范围包括在内)很好,但请您告诉我如何为
[x,y]
做到这一点?因为
[5,8]
只是一个例子。。。(当然,这个范围也包括在内)在
String.prototype
中添加一个方法肯定更优雅。然而,许多浏览器使用优化技巧,当诸如
String
之类的本机原型发生更改时,这些技巧将被取消激活。速度上的差异可能相当大,可能会影响
String.prototype
的所有成员。在部署之前,请确保在最常见的浏览器中进行测试。向
String.prototype
添加方法肯定更优雅。然而,许多浏览器使用优化技巧,当诸如
String
之类的本机原型发生更改时,这些技巧将被取消激活。速度上的差异可能相当大,可能会影响
String.prototype
的所有成员。在部署之前,请确保在最常见的浏览器中进行测试。在+1..下工作非常完美。。!每天早上我问一个问题,你就来在我的问题下写一个很好的答案
:-)
。。。好job@stack如果您将我的标签添加到您的问题中,我应该在那里…-)很高兴知道。。但是你的标签是什么?正则表达式?在+1..下工作非常完美。。!每天早上我问一个问题,你就来在我的问题下写一个很好的答案
:-)
。。。好job@stack如果您将我的标签添加到您的问题中,我应该在那里…-)很高兴知道。。但是你的标签是什么?正则表达式?