如何匹配和替换字符串及其在javascript中的一个字母之前?

时间:2011-12-22 07:20:02

标签: javascript

var str="itss[BACK][BACK][BACK][BACK][BACK][BACK] it's a test stringgg[BACK][BACK]";
var word = '[BACK]';
var substrings = str.split(word);
var cnt= substrings.length - 1;
for(var i = 0;i<cnt;i++){
  str = str.replace(/.{1}\[BACK\]{1}/i,""); //remove backspace and one character before it.
}

上面的脚本会返回类似“[它是一个测试字符串”的内容我需要将此结果称为“它是一个测试字符串”请帮助我....

4 个答案:

答案 0 :(得分:2)

实际上如果没有正则表达式,这样做会更容易。

String.prototype.replaceFromIndex=function(index, length, replace) {
    return this.substr(0, index) + replace + this.substr(index+length);
}

var search = '[BACK]';
var str="itss[BACK][BACK][BACK][BACK][BACK][BACK] it's a test stringgg[BACK][BACK]";

while((index = str.indexOf(search)) >= 0){
    str = str.replaceFromIndex(index-1, search.length+1, '');    
}

alert(str);

检查http://jsfiddle.net/fRThH/2/是否有工作示例。 将它包装在一个函数中,你就可以开始了!

由Cem Kalyoncu(https://stackoverflow.com/a/1431113/187018)提供String.prototype.replaceAt的略微修改版本

答案 1 :(得分:1)

我的想法是计算所有退格[BACK],然后逐个用空字符串替换它们:

var str="itss[BACK][BACK][BACK][BACK][BACK][BACK] it's a test stringgg[BACK][BACK]";

var backspaces = str.match(/\[BACK\]/g).length;

for(i=0; i<backspaces; i++)
{
    str = str.replace(/.?\[BACK\]/, '');
}
document.write( str );

工作示例:jsFiddle

答案 2 :(得分:0)

如果我理解正确

var dat = str.split('[BACK]').filter(function(e){return e})[1];

here是工作演示。

答案 3 :(得分:0)

我发现的一个问题是你没有设置一个条件,当字符串'[BACK]'处于零位置时你不必删除第一个字符。

好吧,我在这里发布的解决方案首先搜索第一个'[BACK]'字符串的位置,然后创建我们要删除的字符的子字符串,这样,如果字符串前面有一个字符'[BACK]',它包含在子字符串中。然后,从主字符串中删除子字符串,并继续循环,直到删除所有'[BACK]'

var str = "itss[BACK][BACK][BACK][BACK][BACK][BACK] it's a test stringgg[BACK][BACK]";
var word = '[BACK]';
var substrings = str.split(word);
var cnt = substrings.length - 1;
for (i = 0; i < cnt; i++) {
    pos = str.search("[BACK]");
    if (pos - 1 > 0) {
        str = str.replace(str.substring(pos - 2, pos + 5), '');
    } else {
        str = str.replace(str.substring(pos - 1, pos + 5), '');
    }
}

Here is the code in jsfiddle: