我需要在空格字符('')上分割字符串,但排除任何空格,这些字符位于2个特定字符(例如单引号)内。
以下是一个示例字符串:
这是第一个令牌,这是第二个令牌'这是第三个令牌'
输出数组应如下所示:
[0] = This-is-first-token
[1] = This-is-second-token
[2] = 'This is third token'
问题: 这可以通过正则表达式优雅地完成吗?
答案 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'"]
我认为这很简单,只能用正则表达式。
最后的g
使其成为全局匹配,因此您可以获得所有三场比赛。没有它,你只得到第一个字符串。
\s
匹配所有空格(在本例中基本上是和制表符)。因此,即使
This-is-first-token
和This-is-second-token
之间有一个标签,它也会有用。
要匹配大括号中的内容,请使用:
data.match(/\{[^\}]+\}|[^\s]+/g);
大括号或单引号:
data.match(/\{[^\}]+\}|'[^']+'|[^\s]+/g);
答案 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'"]