Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript正则表达式仅在特定上下文中按空格分割_Javascript_Regex - Fatal编程技术网

JavaScript正则表达式仅在特定上下文中按空格分割

JavaScript正则表达式仅在特定上下文中按空格分割,javascript,regex,Javascript,Regex,给定字符串:word{test} 如何将其拆分为如下数组: ["word", "word{test test}"] 我想按空格分割,但忽略花括号内的空格,而不是将其视为分割,我认为更容易将其视为匹配。下面是我调制的正则表达式。您可以使用的代码行是: str.match(/[^\s]*{[^}]*}[^\s]*|[^\s{}]+/g) 为了更具可读性,可以分为两部分。第一: [^\s]* { [^}]* } [^\s]* 它表示任意数量的非空白,后跟一个{后跟任何不是a}的东西,然后是一个}

给定字符串:
word{test}

如何将其拆分为如下数组:

["word", "word{test test}"]

我想按空格分割,但忽略花括号内的空格,而不是将其视为分割,我认为更容易将其视为匹配。下面是我调制的正则表达式。您可以使用的代码行是:

str.match(/[^\s]*{[^}]*}[^\s]*|[^\s{}]+/g)
为了更具可读性,可以分为两部分。第一:

[^\s]* { [^}]* } [^\s]*
它表示任意数量的非空白,后跟一个{后跟任何不是a}的东西,然后是一个},然后是任意数量的非空白。所以我认为你必须假设每一个出发点都是有上限的。我不确定你是否可以这样假设。如果需要匹配嵌套大括号,则需要使用比Regex/FA更强大的工具,因为它没有state

第二部分是

[^\s { }]+
表示匹配一个或多个非空白/非花括号项


下面是一个显示代码的JSFIDLE

使用纯JavaScript正则表达式无法做到这一点。不过,我现在要收回我的话,因为您可以使用以下使用回调参数的解决方案:

var regex = /{[^}]+}|( )/g
replaced = subject.replace(regex, function($0, $1) {
    if ($1 == " ") return "\0";
    else return $0;
});
splits = replaced.split("\0");
阅读更多信息:


这并不是万无一失的,但只有在字符串前面的
{
前面没有
}
时,才能在一个或多个空格字符上拆分

var str = 'word word{test test}';

str.split( /\s+(?![^{]*})/ );   
// ["word", "word{test test}"]

因此,您希望在所有没有“test”的空间上进行拆分任何一方?或者你想忽略大括号内的空格?你给出了一个相当模糊的例子-你能尝试准确地定义你想做什么吗?确切的要求是什么?我想忽略大括号内的空格。如果我的措辞是含糊不清的,我很抱歉hey@Unihedron,谢谢你的解决方案。我不知道Don’我不认为你遗漏了什么,它解决了问题。我将给Chris B正确的答案。他的解决方案似乎更快。只是来发布一个类似的解决方案。这是我的正则表达式:[a-Za-z]+\{.+\}[a-Za-z]+/g、 这很有效。谢谢。我不认为你需要第二部分中的“|”但是。谢谢,很高兴它有效,我认为你对下半场的看法是正确的,只需要是[^\s]+-1模式
[^\s | ^{+
显示缺乏基本的正则表达式知识。介意分享一下您不喜欢的模式吗?下面是一个正则表达式示例,说明最后两个OR不是无用的。
var str = 'word word{test test}';

str.split( /\s+(?![^{]*})/ );   
// ["word", "word{test test}"]