2015-06-03 3 views
1

Я пробовал много вещей и искал пространство для добавления после любого символа, который не является буквой. В настоящее время я могу заменить все символы без буквы пробелом, но я хочу пробел до символ соответствует. На данный момент у меня есть:regex - добавить пробел перед символом, который не является буквой

var str = 'div#some_id.some_class'; 
str = str.replace(/[^A-Za-z0-9]/g, ' '); 

Это дает мне следующее,

div some_id some_class 

однако я ищу результат быть div #some_id .some_class

Любая помощь будет принята с благодарностью.

+0

является 'föóbàr' для' е ö О.Б. àr' (и вещи вдоль этой линии) и результат что ты хочешь? Или у вас будет меньшее количество подмножеств символов, которые вы считаете совпадающими (например, '.',' # 'и т. Д.)? – GitaarLAB

+1

ответ ниже дает то, что я ищу, но я ищу только меньшее подмножество, т.е. '' '.''',' '' # '' ' –

ответ

1

Вы можете попробовать это:

str = str.replace(/([^a-zA-Z0-9_])/g, ' $1') //Omit 0-9 if you you want a space before them too 

//OUTPUT: div #some_id .some_class 
+0

Это на самом деле именно то, что я искал –

4

Вы можете использовать отрицательный предпросмотр для этого:

str = str.replace(/(?!\w|$)/g, ' ') 
//=> "div #some_id .some_class" 

(?!\w|$) будет соответствовать позиции, где следующий символ не alpha0numeral или конец строки.

+0

это замечательно. Если бы я хотел просто сопоставить '' '.''' и' '' # '' ', так как есть случай, когда' '' '' '' соответствует, и также предоставляется пространство, которое я не хочу. Как это нужно изменить для этого? –

+0

Проверьте мое обновление, чтобы ответить, я думаю, это то, что вы хотите. – anubhava

+1

На самом деле, поскольку я еще больше осмотрел, это не точный ответ, который я искал, но тот, который предоставил Зи. Внимательно оцените вашу помощь с этим –

1

Использование групп и замещение

var str = 'div#some_id.some_class'; 
 
str = str.replace(/([^A-Za-z0-9])/g, ' $1'); 
 
console.log(str);

+0

Я знаю, он говорит в вопросе ** после **, но его результаты показывают ** перед ** – AmmarCSE

+1

извинениями, я имел в виду прежде.Спасибо –

+0

Я пробовал ваш ответ, он хорошо работает, но когда я добавляю специальные атрибуты бок о бок, как div # some_id. # Some_class, и он также не работает для $ special charcter –

0

Также попробуйте на \b словоразделами, где \W не символ слова впереди:

(?=\W)\b и замените соответствующее положение пробелом (regex101).

1

Если у вас есть точная подмножество, вам, вероятно, будет лучше указать только (но точно), что (поскольку Unicode имеет довольно некоторые символы, о которых вы, возможно, даже не думали .. подумайте о таких вещах, как непреднамеренный föóbàr к f ö ób àr, не говоря уже о языках, которые на самом деле не используют A-z):

var str = 'div#some_id.some_class'; 
 
str = str.replace(/[.#]/g // add your exact subset to match on between the [ ] 
 
       , ' $&'  // $& inserts the matched substring (no capturing group needed) 
 
       ); 
 
console.log(str);

Смежные вопросы