2010-07-20 60 views
0

我的markdown实现将双连字符转换为分隔符。例如,一个 - B成为一个 - B将连字符转换为双连字符的正则表达式

但有时用户写一个 - B时,他们的意思是一个 - B。我想要一个正则表达式来解决这个问题。

很明显body.gsub(/ - /, " -- ")想到了,但这样做会降低降价的无序列表 - 即如果一条线开始- list item,它将变为-- list item。因此,解决方案必须只换出连字符时,有一个单词字符某处左手

回答

1

可以匹配一个单词字符连字符的左侧,使用替换字符串中的逆向引用把它放回去:

body.gsub(/(\w) - /, '\1 -- ') 
+0

你还打了一个\ s?在那里照顾有没有空间: (\ w)\ s? - – 2010-07-20 01:58:07

1

也许,如果你想多一点接受...

gsub(/\b([ \t]+)-(?=[ \t]+)/, '\1--') 

\ b [\ t]强制通过一个单词边界条件的空白之前非whitepace。我不使用\ s来避免线路运行。我也只使用一个捕获来保存前面的空格(Ruby 1.8.x有没有?<=?)。

+0

这个正则表达式对yjerem的(简单的)答案有什么好处? – 2010-08-09 16:19:47

+0

@Horace它接受更多并保留输入的空格(空格或制表符)。例如:“Hello \ t \ t- world!”将会变成“Hello \ t \ t--世界!”,这可能会或可能不合意。 – 2010-08-10 18:43:53

相关问题