Javascript正则表达式帮助不匹配char

时间:2011-08-01 10:30:02

标签: javascript regex

我正在创建自己的降价编辑器,它像粗体溢出一样粗体和斜体:

// **bold**
Text = Text.replace(new RegExp("\\*\\*(.+?)\\*\\*", "g"), '<strong>$1</strong>');

// *italic*
Text = Text.replace(new RegExp("\\*(.+?)\\*", "g"), '<em>$1</em>');

现在的问题是,如果有人希望在其文本中包含一系列asterix,请执行以下操作:

  

如果你想做A * B * C那么......

这将是:

  

B C

如果asterix之后没有触及空格字符,那么只有asterix才能正常工作。例如:

** Bold ** = not bold
**Bold** = bolded
* Italic * = not italic
*Italic* = italics

所以我尝试添加[^ ]以使其匹配非空格字符,这有点儿错误:

// **bold**
Text = Text.replace(new RegExp("\\*\\*(.+?)\\*\\*", "g"), '<strong>$1</strong>');

// *italic*
Text = Text.replace(new RegExp("\\*[^ ](.+?)[^ ]\\*", "g"), '<em>$1</em>');

这似乎从1美元的开头和结尾剥离了一个角色,但除此之外它还有效。如何修改我的正则表达式,这样只有当包含在其中的文本没有被任何空格填充时,才会激活粗体和斜体?

修改

// **bold**
Text = Text.replace(new RegExp("\\*\\*([^ ](.+?)[^ ])\\*\\*", "g"), '<strong>$1</strong>');

// *italic*
Text = Text.replace(new RegExp("\\*([^ ](.+?)[^ ])\\*", "g"), '<em>$1</em>');

但测试用例:

this ** shouldnt be bold ** ewfwef

呈现为

  

这* 不应该是粗体 * ewfwef

1 个答案:

答案 0 :(得分:2)

将字符类放在捕获组中:

([^ ].+?[^ ])

或稍短(并考虑所有空格):

(\S.+?\S)