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

时间:2016-01-22 04:53:36

标签: javascript jquery regex string

我有一个这样的字符串:

var str = "this
           is
           a
           string";

我也有这样的正则表达式:

str.replace(/\n/g, " ");

上面的代码适用于所有字符串的正则表达式,输出将是:

output: // this is a string

虽然我想在此范围之间应用它:[5, 8]。换句话说,我想要这个输出:

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

我该怎么做?

3 个答案:

答案 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);