2016-01-22 80 views
0

我有一个这样的字符串:如何替换特定范围的字符串?

var str = "this 
      is 
      a 
      string"; 

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

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

上面的代码应用于的正则表达式所有的字符串,并且输出中会是这样的:

output: // this is a string 

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

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

我怎么能这样做?

回答

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/, ' ')}))

+1

完美地工作+1 ..!每天早上我都会问一个问题,你会在我的问题下写出一个很好的答案':-)'好工作 – stack

+2

@stack我应该在那里,如果你把我的标签添加到你的问题.. :-) –

+0

很好知道..但是你的标签是什么?正则表达式? – stack

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后整个字符串。

+0

好,但可能会请你告诉我,我怎么能做到这一点的'[X,Y]'?因为'[5,8]'仅仅是一个例子... *(也是的,这个范围是包含的)* – stack

+0

感谢您的更新..让我检查它.. – stack

+0

很好......谢谢+1 – stack

0

据丕马里利恩的答案,这可能是也没关系:

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); 
+0

添加方法来'String.prototype'绝对更优雅。然而,许多浏览器使用优化技巧,当“String”等原生原型发生更改时,它会停用。速度的差异可能相当大,并可能影响'String.prototype'的所有成员。确保在部署之前在最常见的浏览器中进行测试。 –

+0

@PiMarillion好的,谢谢你的积分.. – stack

相关问题