我有一个类似parameter parameter2 {characters}
的字符串,其中参数之间可以有任意数量的参数和任意数量的空格,然后在参数列表之后有一个额外的可变数量的空格,然后是花括号之间的字符。
我的尝试/(?:([^{]*)\s*)?(\{.*\})?/
。
我需要将捕获组1作为参数参数2,将capture group 2
作为{characters}
背景的
我有一个发布/订阅模式设置和"事情"发布和订阅不受我控制,并且可以包含任意数量的空格,花括号和它们内部的内容被解析为json并作为参数传递给订阅方法。
答案 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+)\})