2013-08-06 96 views
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 wokrs!

我应该用neggative 负回顾后 ...

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

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

确保lookbehinds在JavaScript中不受支持。我不知道如何输出 http://regex101.com 。也许PHP或其他服务器上。

EDIT3:

这一直是非常棘手的。查看完整的工作代码我张贴:

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

+0

var str =“rsync -r -t -p -o -g -v --progress --delete -l -H/Users/ken/Library/Application \ Support/Sublime \ Text \ 3/Packages /用户/ ken/Google \ Drive/__ config-GD/ST3“' 'var n = str.split(”“);'会给你所有部件中的n个数组......我不确定这是正则表达式的完美使用...将它们分组成组将会是,但我没有看到你这样做。让我知道。 – abc123

+0

其实,我使用.split的正则表达式。我找到了答案,但谢谢。 –

回答

1

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

编辑:我通常不会用JavaScript工作,所以我不知道任何快速快捷方式,所以我觉得你可以在两个步骤做:

  1. 执行替代(替换)使用此正则表达式:\\\s ,替换分号;这样的:var newCommand = command0.replace(/\\\s/g, ";");
  2. 然后使用这个表达式进行拆分:\s这样的:var result = newCommand.split(/\s/);
+0

是的,那是对的。谢谢@Sniffer –

+0

@KenOKABE欢迎虽然我回答克里斯之前,检查时间:) –

+0

哦,对不起。实际上,我已经尝试了js拆分中的这个正则表达式。它会产生错误。看我的编辑,请让我知道你的想法。 –

1

你试图匹配不包括你调用一个什么“逃逸空间”的所有空间。

您应该能够实现与负回顾后:

(?<!\\)\s 

将匹配不\前面的任何空间。

您使用的第二个正则表达式是(?!\\.)\s,它使用了负向预测,并且搜索空格后面跟着\(any character),这就是为什么它不起作用。

编辑:Lookbehinds不会在JavaScript中工作,学到了新的东西。

+0

对,谢谢!我会检查你的答案,因为它是第一个。克里斯 –

+0

谢谢,虽然嗅探器稍微在我之前:P – Chris

+1

'foo \\ bar'呢?如果有一个奇数的'\'而不是偶数,那么负面的后视不需要通过吗?经常regex实现需要lookbehinds具有固定的长度,所以我认为这通常是不可行的。 –