1

给定一个字符串: 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工作!

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

编辑2:

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: /(?<!\\)\s/: Invalid group

哎呀,JavaScript中的解决方法是什么?

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

编辑3:

这非常棘手。请参阅我发布的完整工作代码:

shell 命令到 child_process.spawn(command, [args], [options]) node.js

4

2 回答 2

1

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

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

(?<!\\)\s

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

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

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

于 2013-08-06T22:54:49.917 回答
0

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

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

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