我有以下示例字符串。
您好{{ bob .name}} bob.name {{john.name}}
我突出了我想要匹配的部分。 它必须在每一端的两个花括号之间,它必须是点之前的第一个单词。
我试过这个正则表达式[^{{}}]+(?=\}})
,但它匹配大括号之间的所有内容,如此
您好{{ bob.name }} bob.name {{ john.name }}
如果我能提供一个要查找其名称的变量,那也是非常好的。
答案 0 :(得分:2)
您可以将此正则表达式与否定字符类,前瞻和捕获组一起使用:
/{{([^}.]+)(?=(?:(?!}}).)*}})/
([^}.]+)
:[^}.]+
匹配不是点而非}
的字符。 (...)
在第1组中捕获。(?=(?:(?!}}).)*}})
是一个先行者,声称我们前面有}}
。要替换bob
内的{{...}}
,请使用:
repl = str.replace(/({{)bob(?=(?:(?!}}).)*}})/gi, '$1newVal');
要匹配bob
内的{{...}}
,请使用:
{{bob(?=(?:(?!}}).)*}})
答案 1 :(得分:1)
答案 2 :(得分:0)
使用
(?<={{)([^{}]+?)(?=(?:\.(.*))?}})
它只匹配 bob 并有2个匹配的组:第一个 - bob 和第二个 - 名称。
您可以像这样使用它(使用ES6语法):
const str = 'Hello {{bob.name}} bob.name {{john.name}}';
str.replace(/(?<={{)([^{}]+?)(?=(?:\.(.*))?}})/g, (allMatch, person, property) => {
console.log(`All match = ${allMatch}, person = ${person}, property = ${property}`);
}));