匹配所有字符减去尾部空白,然后匹配大括号之间的字符

match all characters minus trailing whitespace then characters between curly braces

本文关键字:字符 之间 然后 尾部 空白      更新时间:2023-12-20

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

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

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

背景
我有一个发布/订阅模式设置,发布和订阅的"东西"不受我的控制,可以包含任何数量的空格,大括号和其中的内容被解析为json,并作为参数传递给订阅方法。

([^{]*?)'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.
}

正则表达式,您似乎工作得很好,但您需要对结果数组进行切片,以获得您想要的响应,如

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

如果你正在寻找一个不使用切片/拼接的精确阵列,你可以尝试像一样进行拆分

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

这应该有效:

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