有没有人知道用正则表达式在括号之间的字符串中查找任何内容的最佳方法(引号除外)。例:
这是我的{string between braces}
,该模式应匹配,但应忽略此"{string between braces}"
。
这个正则表达式会让我在括号之间得到任何东西...
/\{([^}]+)\}/g
编辑:
对于那些迄今为止提供了潜在解决方案的人,我表示感谢。对于那些对此表示歉意表示怀疑的人,它很快就被开除,目的是要重新进行编辑。
鉴于以下情况:
var str1 = 'Lorem ipsum dolor {sit} amet, consectetur {adipiscing} elit,
sed do eiusmod tempor incididunt ut labore et dolore magna aliqua';
预期结果:{sit}和{adipiscing}匹配
var str2 = 'Lorem "ipsum "dolor {sit} amet", consectetur" {adipiscing} elit,
sed do eiusmod tempor incididunt ut labore et dolore magna aliqua';
预期结果:{sit}和{adipiscing}匹配(因为两者都不在开引号之间)
var str3 = 'Lorem ipsum "dolor {sit} amet", consectetur {adipiscing} elit,
sed do eiusmod tempor incididunt ut labore et dolore magna aliqua';
预期结果:{adipiscing}
为了清楚起见,术语“引号”仅是引号,而不是撇号。
最佳答案
一种选择是匹配以"{...}"
开头的所有字符串,并在组中使用alternation捕获替代项
"{[^{}]*}"|\{([^}]+)\}
Regex demo
const regex = /"{[^{}]*}"|\{([^}]+)\}/g;
const str = `{string between braces}
"{string between braces 2}"
`;
let m;
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
if (m[1]) {
console.log(m[1]);
}
}
另一种选择是也可以在开头匹配一个
"
或在结尾匹配一个"
,以在使用单引号引起来时不捕获该组。"{[^{}]+}"?|{[^{}]+}"|{([^{}]+)}
Regex demo
在部分
"{[^{}]+}"?
从打开"{
到关闭}
和可选的"
|
或{[^{}]+}"
从打开{
到关闭}
和"
|
或{
比赛开幕式{
([^{}]+)
捕获组1,匹配除{
或}
}
比赛结束}
const regex = /"{[^{}]+}"?|{[^{}]+}"|{([^{}]+)}/g;
const strings = [
'{string between braces}',
'"{string between braces 2}"',
'"{string between braces 3}',
'{string between braces 4}"',
'start"{str5}"{str6}"end'
].forEach(s => {
let m;
while ((m = regex.exec(s)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
if (m[1]) {
console.log(m[1]);
}
}
});
关于javascript - 正则表达式可匹配括号之间的任何内容(引号除外),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59437931/