我有一个这样的字符串:
var str = "this
is
a
string";
我也有这样的正则表达式:
str.replace(/\n/g, " ");
上面的代码适用于所有字符串的正则表达式,输出将是:
output: // this is a string
虽然我想在此范围之间应用它:[5, 8]
。换句话说,我想要这个输出:
what I want: /* this
is a
string
*/
我该怎么做?
答案 0 :(得分:1)
我假设[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_end
后面找到整个字符串,则可以省略i_start
。
答案 1 :(得分:1)
您也应该在string.replace
内使用回调函数。
var str = "this\nis\na\nstring";
alert(str.replace(/^([\s\S]{5})([\s\S]{3})/, function (x,y,z){return y + z.replace(/\n/, ' ')}))
答案 2 :(得分:0)
根据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));
}
然后你就可以这样使用:
str.replace_range(/\n/g, 5, 8);