2017-01-30 12 views
0
String.prototype.replaceAt = function(index, character) { 
    console.log("replacing " + character + " at " + index); 
    return this.substr(0, index) + character +  this.substr(index+character.length); 
} 
var reg = new RegExp("[01]{8,}"); 
var inner = "Non Binary Text 01110100 01100101 01110011 01110100 non binary text."; 
    inner = inner.replace(" ", ""); 
    for(var iii = 0; iii < 5; iii++){ 
    var pos = inner.search(reg); 
    for (var i=pos; i < inner.length; i++) { 
     if(inner.charAt(i) == "1" || inner.charAt(i) == "0") continue; 
     else if(inner.charAt(i) == " "){ 

       inner = inner.replaceAt(i, ""); 
     } 
     else{ 
      break; 
     } 
    }} 

    inner = inner.replace(/[01]{8}/g, function(v) { 
return String.fromCharCode(parseInt(v,2)); 

}); 
//alert(inner); 
console.log(inner); 

Вот ссылка на мою скрипку http://jsfiddle.net/qjpgaz5h/ Проблема у меня в том, что я хотел, чтобы удалить пробелы между блоками двоичная, но не между несоблюдением двоичном, но по какой-либо причине замена символа не работает, и я не могу понять, почему, если я заменяю пространство буквально чем-то другим, кроме него, то он отлично работает.Замена только некоторые пробелы в JavaScript с не пробелами

То, что я хотел, чтобы удалить пробелы так, чтобы превратить

Non Binary Text 01110100 01100101 01110011 01110100 не бинарный текст.

в

Non Binary Text 01110100011001010111001101110100 не бинарный текст.

+0

Вы хотите удалить пробелы между каждыми 8 битами? –

+1

Просьба описать, что вы хотите сделать. –

+1

Отображение ожидаемого результата помогло бы – charlietfl

ответ

0

Попробуйте /([01]{8})\s+([01]{8})/g как:

inner = inner.replace(/([01]{8})\s+(?=[01]{8})/g, "$1"); 

Это будет соответствовать несколько пространств \s+ окруженных 8 бит блока. Заменим block - spaces - (? = block) с block ($1) где $1 означает первую группу (первое, что между пробелами). Вторая группа ((?[01]{8})) - это смотровая группа, она не включена в игру.

Пример:

var inner = "Non Binary Text 01110100 01100101 01110011 01110100 non binary text."; 
 

 
console.log("Before: '" + inner + "'"); 
 

 
inner = inner.replace(/([01]{8})\s+(?=[01]{8})/g, "$1"); 
 

 
console.log("After: '" + inner + "'");

+0

Спасибо, и ваше, и Рамадургарао работали – user3930869

0

вы можете использовать ниже регулярное выражение для замены пробелов между двоичными цифрами,

("Non Binary Text 01110100 01100101 01110011 01110100 non binary text.").replace(/([01]+)\s(\d)/g,"$1$2") 

Это регулярное выражение находит двоичную цифры строки с пробелом после что и заменяет его без пробела.