2013-11-09 2 views
1

Дано входной текст такой, где все пробелы заменяются на п _:JS & Regex: как правильно заменить шаблон препинания?

Hello_world_?. Hello_other_sentenc3___. World___________. 

Я хочу, чтобы держать _ между словами, но я хочу, чтобы придерживаться каждый знак препинания обратно до последнего слова приговора без какого-либо пространства между последним словом и пунктуацией. Я хочу использовать пунктуацию как ось моего регулярного выражения.

Я написал следующее JS-Regex:

str = str.replace(/(_|)*([:punct:])*(|_)/g, "$2$3"); 

Это не удается, так как он возвращает:

Hello_world_?. Hello_other_sentenc3_. World_._ 

Почему это не работает? Как удалить все «_» между последним словом и пунктуацией? http://jsfiddle.net/9c4z5/

+0

Я не верю, что JS имеет 'пунктуатора' вариант в его регулярных выражениях дела ввода. – nnnnnn

+0

У вас есть идея, что я должен использовать вместо этого? – Hugolpz

ответ

4

Попробуйте following regex, что делает использование positive lookahead:

str = str.replace(/_+(?=\.)/g, ""); 

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

Если вы хотите совместить другие знаки препинания, а не только период, замените часть \. на соответствующий класс символов.

+0

Мне нужны все пунктуации, мои конечные пользователи многоязычны, используют несколько сценариев. – Hugolpz

+0

@Hugolpz Вы пытались реализовать то, что я объясняю в последнем абзаце? –

+0

Я прихожу, я притворяюсь, что понимаю, что такое «класс персонажа», но хочу получить точный ответ, а я просто не понимаю вашего ответа («класс персонажа»). Только то. – Hugolpz

1

У JavaScript не было :punct: в своей реализации в регулярном выражении. Я считаю, что вы должны перечислить на знаки препинания, вы заботитесь о, возможно, что-то вроде этого:

str = str.replace(/(_|)+([.,?])/g, "$2"); 

То есть, заменить любую группу _ или пространство, которое сразу же следуют точечностью только с пунктуацией.

Демо: http://jsfiddle.net/9c4z5/2/

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