Javascript Regex - 忽略2个字符之间的某些字符

时间:2013-11-21 06:30:00

标签: javascript regex

我需要在空格字符('')上分割字符串,但排除任何空格,这些字符位于2个特定字符(例如单引号)内。

以下是一个示例字符串:

  

这是第一个令牌,这是第二个令牌'这是第三个令牌'

输出数组应如下所示:

[0] = This-is-first-token
[1] = This-is-second-token
[2] = 'This is third token'

问题: 这可以通过正则表达式优雅地完成吗?

3 个答案:

答案 0 :(得分:9)

简答:

为此目的的一个简单的正则表达式是:

/'[^']+'|[^\s]+/g

示例代码:

data = "This-is-first-token This-is-second-token 'This is third token'";
data.match(/'[^']+'|[^\s]+/g);

结果:

["This-is-first-token", "This-is-second-token", "'This is third token'"]

说明:

Regular expression visualization

Debuggex Demo

我认为这很简单,只能用正则表达式。

最后的g使其成为全局匹配,因此您可以获得所有三场比赛。没有它,你只得到第一个字符串。

\s匹配所有空格(在本例中基本上是和制表符)。因此,即使This-is-first-tokenThis-is-second-token之间有一个标签,它也会有用。

要匹配大括号中的内容,请使用:

data.match(/\{[^\}]+\}|[^\s]+/g);

Regular expression visualization

Debuggex Demo

大括号或单引号:

data.match(/\{[^\}]+\}|'[^']+'|[^\s]+/g);

Regular expression visualization

Debuggex Demo

答案 1 :(得分:1)

您可以使用此拆分:

var string = "This-is-first-token This-is-second-token 'This is third token'";
var arr = string.split(/(?=(?:(?:[^']*'){2})*[^']*$)\s+/);
//=> ["This-is-first-token", "This-is-second-token", "'This is third token'"]

这假设报价均衡。

答案 2 :(得分:0)

我想出了以下内容:

"This-is-first-token This-is-second-token 'This is third token'".match(/('[A-Za-z\s^-]+'|[A-Za-z\-]+)/g)
["This-is-first-token", "This-is-second-token", "'This is third token'"]