正则表达式选择引号中的所有空格?

时间:2016-04-18 22:30:26

标签: javascript regex textmate

例如:

string text = 'some text "and some more" and some other "this is a second group" okay the end';

我想要捕获引号之间的所有空格。最终目标是用逗号替换这些空格。

最终目标,例如:

'some text "and,some,more" and some other "this,is,a,second,group" okay the end'

例如,这可以在javascript中执行我想要的操作:

text.replace(/(["]).*?\1/gm, function ($0) {
    return $0.replace(/\s/g, ',');
});

不幸的是,我唯一可用的工具是textmate的查找/替换功能。

我发现另一个与我需要的相反,但是使用了我需要的一行:

text.replace(/\s+(?=([^"]*"[^"]*")*[^"]*$)/gm, ',');

谢谢!

1 个答案:

答案 0 :(得分:2)

您可以使用

\s+(?=(?:(?:[^"]*"){2})*[^"]*"[^"]*$)

请参阅regex demo

\s+匹配1个或多个空格,后跟奇数个双引号。

详细信息:空白匹配部分很简单,正向前瞻需要

  • (?:(?:[^"]*"){2})* - 除{a "以外的{0}字符匹配的2个序列的零个或多个序列,然后是"(0 + "..." s)
  • [^"]*"[^"]* - 除"以外的0 +个字符后跟",后跟0 {+ 1}以外的0 +字符(奇怪的引号必须是当前匹配的空格的权利)
  • " - 字符串结束。