2013-04-23 81 views
4

我需要一个regrex来替换逗号是两个字符之间没有空格。正则表达式来替换只有某些逗号

文字:荷马,辛普森,杰克,丹尼尔斯,NICK,凯奇

期望的结果:荷马,辛普森 - 杰克,丹尼尔斯 - NICK,凯奇

这是我能想出的,但它取代信件以及逗号

/[a-zA-z],[a-zA-z]/ 
+0

研究积极/消极的预见。 – 2013-04-23 15:24:53

回答

3
"HOMER, Simpson,JACK, Daniels,NICK, Cage".replace(/(,(?!\s))/g, ' - '); 

http://jsfiddle.net/samliew/sQKNN/

如果你还需要检查一个逗号前前导空格,

.replace(/((?!\s),(?!\s))/g, ' - ')) 
+0

他想用' - '替代,而不是',' – tessi 2013-04-23 15:26:52

+0

阅读得太快。更新了答案。 – 2013-04-23 15:29:47

3

在正则表达式,\S代表所有非空格字符。

var input = "HOMER, Simpson,JACK, Daniels,NICK, Cage"; 

var output = input.replace(/(\S),(\S)/g, '$1 - $2'); 
1

尝试

'HOMER, Simpson,JACK, Daniels,NICK, Cage'.replace(/([^\s]),([^\s])/gi, '$1 - $2'); 
2

这不是太难以实现。

  • \S字符类表示所有非空白字符。
  • 您可以使用括号()来捕获。在替换字符串中,您可以参考$0(代表整个匹配),$1(代表第一组),$2$3等代表后续组的每个捕获组。

下面的代码你想要做什么:

var input = "HOMER, Simpson,JACK, Daniels,NICK, Cage" 
, output = input.replace(/(\S),(\S)/g, '$1 - $2'); 

请注意,由于\s[ \t\r\n]的当量(即以下任意字符:空格,制表符,CR [回车],LF [换行]),并且\S\s相反,\S也不会匹配制表符或换行符。