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如果您将我的标签添加到您的问题中,我应该在那里…-)很高兴知道。。但是你的标签是什么?正则表达式?