【问题标题】:regex to match space but escaped space正则表达式匹配空间但转义空间
【发布时间】:2013-08-08 03:30:44
【问题描述】:

给定一个字符串: rsync -r -t -p -o -g -v --progress --delete -l -H /Users/ken/Library/Application\ Support/Sublime\ Text\ 3/Packages /Users/ken/Google\ Drive/__config-GD/ST3

正则表达式匹配空间但我尝试过转义空间:

首先匹配转义的空格(或任何)。

\\.

http://regex101.com/r/uL0mP8 有效。

接下来,要匹配空格,请排除转义的空格(或任何空格)。

(?!\\.)

http://regex101.com/r/fK3sW9 不工作。

代码有什么问题? javascript。

谢谢

编辑:

(?<!\\) http://regex101.com/r/fZ5uP2 wokrs!

我应该使用否定的Negative Lookbehind...

EDIT2:

var command0 = `rsync -r -t -p -o -g -v --progress --delete -l -H /Users/ken/Library/Application\ Support/Sublime\ Text\ 3/Packages /Users/ken/Google\ Drive/__config-GD/ST3`;

var regex = new RegExp('(?<!\\)\s')
var commandA = command0.split(regex);

错误 - Invalid regular expression: /(?&lt;!\\)\s/: Invalid group

糟糕,JavaScript 中的解决方法是什么??

JavaScript 不支持 OK Lookbehinds。我不确定如何 http://regex101.com 可以输出。也许是 PHP 或其他服务器端的。

EDIT3:

这非常棘手。查看我发布的完整工作代码:

shell command to child_process.spawn(command, [args], [options]) node.js

【问题讨论】:

  • var str = "rsync -r -t -p -o -g -v --progress --delete -l -H /Users/ken/Library/Application\ Support/Sublime\ Text\ 3/Packages /Users/ken/Google\ Drive/__config-GD/ST3" var n=str.split(" "); 会给你一个包含所有部分的数组...我不确定这是正则表达式的完美使用...将它们分成组将是但是我没有看到你这样做。告诉我。
  • 实际上,我使用 .split 的正则表达式。我找到了答案,但谢谢。

标签: javascript regex


【解决方案1】:

对于第二种情况,您可以使用:(?&lt;!\\)

编辑:我通常不使用 javascript,所以我不知道任何快捷方式,所以我认为您可以分两步完成:

  1. 使用此正则表达式执行替换(替换)\\\s,替换为分号;,如下所示:var newCommand = command0.replace(/\\\s/g, ";");
  2. 然后使用这个正则表达式执行拆分:\s 像这样:var result = newCommand.split(/\s/);

【讨论】:

  • @KenOKABE 欢迎尽管我在克里斯之前回答,请检查时间:)
  • 哦,对了,对不起。实际上,我已经在 js 的拆分中尝试过这个正则表达式。它会产生错误。看看我的编辑,请告诉我你的想法。
  • @KenOKABE 所以你想在非转义空格周围分割你的命令?
  • 感谢@Sniffer,但实际上,您提供的代码在 JS 上下文中不起作用。反斜杠的转义可能非常棘手。查看我发布的完整工作代码:请检查我对问题的编辑。
【解决方案2】:

您是否尝试匹配所有空格,不包括您所谓的“转义空间”。

您应该能够通过消极的后视来实现这一目标:

(?<!\\)\s

将匹配前面没有\ 的任何空格。

您使用的第二个正则表达式 (?!\\.)\s 使用负前瞻,并搜索 \(any character) 后面没有的空格,这就是它不起作用的原因。

编辑:lookbehinds 在 javascript 中不起作用,学到了一些新东西。

【讨论】:

  • 好的,谢谢!我会检查你的答案,因为它是第一个。克里斯
  • 谢谢,虽然 Sniffer 比我稍早:P
  • foo \\ bar 怎么样?如果有奇数个 '\\' 而不是偶数个,是否不需要通过负向后查找?通常,正则表达式实现需要后视具有固定长度,所以我认为这通常是不可行的。
  • 啊,好点子 - 我只是想问一下,因为我不太明白你在说什么。如果可能的话,我会 +1 评论。
  • 实际上,我已经在 js 的拆分中尝试过这个正则表达式。它会产生错误。看看我的编辑,请告诉我你的想法。
猜你喜欢
  • 2016-11-04
  • 1970-01-01
  • 2016-08-24
  • 1970-01-01
  • 2017-12-24
  • 1970-01-01
  • 2020-04-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多