匹配所有字符减去尾随空格,然后匹配花括号之间的字符

时间:2015-02-18 03:35:56

标签: javascript regex node.js

我有一个类似parameter parameter2 {characters}的字符串,其中参数之间可以有任意数量的参数和任意数量的空格,然后在参数列表之后有一个额外的可变数量的空格,然后是花括号之间的字符。

我的尝试/(?:([^{]*)\s*)?(\{.*\})?/

我需要将捕获组1作为参数参数2,将capture group 2作为{characters}

背景
我有一个发布/订阅模式设置和"事情"发布和订阅不受我控制,并且可以包含任意数量的空格,花括号和它们内部的内容被解析为json并作为参数传递给订阅方法。

3 个答案:

答案 0 :(得分:1)

([^{]*?)\s*(\{.*\})

只需使用它并抓住第1组和第2组。参见演示。

https://regex101.com/r/zB3hI5/13

var re = /([^{]*?)\s*(\{.*\})/gm;
var str = 'parameter parameter2 {characters}\n\n\n';
var m;

while ((m = re.exec(str)) != null) {
if (m.index === re.lastIndex) {
re.lastIndex++;
}
// View your result using the m-variable.
// eg m[0] etc.
}

答案 1 :(得分:0)

正则表达式,你似乎工作正常,但你需要切片结果数组以获得你想要的响应

var myarray = 'parameter parameter2 {characters}'.match(/(?:([^{]*)\s*)?(\{.*\})?/).slice(1)

如果您在不使用切片/拼接的情况下查找精确数组,可以尝试拆分

'parameter parameter2 {characters}'.split(/\s+(?={)/)

答案 2 :(得分:0)

这应该有效:

([\w+\s*]*)(\{\w+)\})