正则表达式将连字符转换为双连字符

时间:2010-07-20 01:44:40

标签: ruby markdown

我对markdown的实现将双连字符转换为endashes。例如, a - b 变为 a - b

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

显然body.gsub(/ - /, " -- ")会浮现在脑海中,但是这会使得markdown的无序列表变得混乱 - 也就是说,如果一行开始- list item,它将变为-- list item。因此,解决方案必须只在左侧某处有单词字符时换掉连字符

2 个答案:

答案 0 :(得分:1)

您可以将单词字符与连字符的左侧匹配,并在替换字符串中使用反向引用将其放回:

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

答案 1 :(得分:1)

也许,如果你想更多地接受......

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

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