2013-08-18 3 views
1

с помощью Javascript, я хочу, чтобы преобразовать текстJavascript Regex с особым характером и пространства

" [a] b [c]" 

в

"[a] b [c]" 

Мой код, как показано ниже:

var test = " [a] b [c]"; 
test.replace(/\s+\[/g, "["); 
alert(test); 

Однако результат is

"[a] b [c]" 

Интересно, почему? Есть идеи?

Спасибо!

+0

@ raina77ow Проверьте источник, нажав на 'edit'. – HamZa

+0

Я не знаю, почему переполнение стека отменяет мой пост. мой результат "[a] b [c]" –

+0

@SantiagoMunez Это HTML, HTML! Несколько пробелов = 1 пробел! – HamZa

ответ

3

Строки неизменяемы. Таким образом, replace не изменяет test, но возвращает измененную строку. Таким образом, вы должны присвоить результат:

test = test.replace(/\s+\[/g, "["); 

Обратите внимание, что это приведет к [a] b[c]. Чтобы получить фактический результат, вы можете использовать:

test = test.replace(/(^|\s)\s*\[/g, "$1["); 

Это гарантирует, что писать обратно первым из космических символов, если он не был в начале строки.

В качестве альтернативы, используйте trim первый и записать обратно одно пространство вручную:

test = test.trim().replace(/\s+\[/g, " ["); 
+0

Да, но теперь мне интересно, почему строка изменилась в примере OP.) – raina77ow

+2

@ raina77ow, потому что он не видел ведущих пробелов в окне предупреждения (если они вообще были визуализированы) –

+0

Argh, но, конечно же. @SantiagoMunez - создайте привычку использовать 'console.log' вместо' alert' для отладки вещей.) – raina77ow

1

Обрезка

test = test.replace(/(^\s+|\s+$)/g, test); 

Или вы можете использовать str.trim(), если ваш браузер поддерживает его

test = test.trim(); 

примечание: если yo Ур нужно поддерживать браузер, который не предлагает str.trim, вы всегда можете использовать es5-shim


Компактные пространства в одну

test = test.replace(/\s+/g, " "); 

один вкладыш

test = test.trim().replace(/\s+/g, " "); 

Пара tes ц

var cleanString = function(str) { 
    console.log(str.trim().replace(/\s+/g, " ")); 
}; 

var examples = [ 
    " [a] b  [c]  ", 
    " [a] [b] [c] [d]", 
    "[a]  b [c]   ", 
    "    [a] b [c] " 
]; 

examples.map(cleanString); 

Выход

[a] b [c] 
[a] [b] [c] [d] 
[a] b [c] 
[a] b [c] 
+0

Спасибо, Наомик. Ваше решение также работает! –