2013-12-07 4 views
0

У меня есть эта функция, которая добавляет дополнительные пробелы после запятой.javascript - удалить лишние пробелы перед заданными символами

function fixString1(inp){ 
    var i, len, arr, outp, Rside, Lside, RsideIsNum, LsideIsNum; 

    arr = inp.split(","); 
    outp = ""; 

    for(i=1, len=arr.length; i<len; i++){ 
     Lside = arr[i-1]; 
     Rside = arr[i]; 

     LsideIsNum = /\d/.test(Lside.charAt(Lside.length-1)); 
     RsideIsNum = /\d/.test(Rside.charAt(0)); 

     outp += "," + ((LsideIsNum && RsideIsNum)?"":" ") + Rside; 
    } 

    return (arr[0] + outp).replace(/ {2,}/g, " "); 
} 

Как это можно изменить, чтобы применить более одного символа, я имею в виду, я хочу, чтобы применить эту функцию, кроме запятой для . ! ? : символов тоже.

Кто-нибудь знает, как решить?

+0

Вы, вероятно, может сделать все это с помощью простой замены регулярного выражения. Вам нужно описать немного лучше, что * точно * вы хотите сделать с входной строкой. – Pointy

+0

Вы должны предоставить некоторые примерные входные и ожидаемые выходы. – anubhava

+0

Хорошо, тогда посмотри мой ответ. Я думаю, вы имеете в виду, что вы хотите, чтобы цифры вышли наподобие «123,456» и в остальном, как «привет, мир». – Pointy

ответ

1

Добавьте еще один параметр в объявление функции, которое указывает символ. Если вы хотите запустить функцию только один раз, вы можете предоставить набор символов в функции разделения, например. inp.split(".,'")

+0

Не очень хорошее решение, если OP должен сделать то же самое для 10 специальных символов. – anubhava

+1

Я хочу вызвать эту функцию только один раз, если это возможно. – zsola3075457

+0

Я вызываю функцию для каждого символа, например fixString1 (inp, specialchar), и я модифицировал функцию таким образом. – zsola3075457

1

Я не уверен, я полностью понимаю, что вы хотите сделать, но я думаю, что вы можете сделать это гораздо более сжато:

function fixString1(inp) { 
    return inp.replace(/(\d)\s+([,!?:.])\s*(\d)/g, "$1$2$3") 
    .replace(/\s*([,!?:.])\s+/g, "$1 "); 
} 

Первое регулярное выражение ищет цифры с обеих сторон специальной символ, с промежуточным пространством слева и, возможно, промежуточным пространством справа. Он заменяет это двумя цифрами и специальным символом, а не пробелами.

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

0

Решение без регулярного выражения.
jsFiddle

var str = " a a givi , asdad , saba a . sdada! hasdjahj ? asdas asd as luka ,  "; 

function fixString(str) { 
    var temp = "", 
     count = 0; 
    str.split("").forEach(function (value, index, array) { 
     var next = array[index + 1], 
      x = value.charCodeAt(), 
      isChar = ((x >= 65 && x <= 90) || (x >= 97 && x <= 122)); 
     if (value === " ") { 
      count++; 
     } else if (count > 0 && value !== " ") { 
      temp += ((next && next !== " ") || (temp.length > 0 && isChar) ? " " : "") + value; 
      count = 0; 
     } else { 
      temp += value; 
     } 
    }); 
    return temp; 
} 
console.log(fixString(str)); 
Смежные вопросы