正则表达式只替换某些逗号

时间:2013-04-23 15:23:24

标签: javascript

我需要一个regrex替换逗号是在两个没有空格的字符之间。

文字:HOMER,Simpson,JACK,Daniels,NICK,Cage

期望的结果:HOMER,Simpson - JACK,Daniels - NICK,Cage

这是我能想到的,但它取代了字母以及逗号

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

4 个答案:

答案 0 :(得分:3)

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

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

如果您还需要在逗号之前检查前导空格,

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

答案 1 :(得分:3)

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

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

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

答案 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 [换行])和{{1 }}是\S的倒数,\s也不会匹配制表符或换行符。

答案 3 :(得分:1)

尝试

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