与this相同,但使用JavaScript。一些例子来说明我的目标:
我制作了一个正则表达式,该正则表达式应该与我要更改的正则表达式/\({2,}[\s\S]*\){2,}/g
相匹配,但是我似乎无法弄清楚如何删除它们。
是否有类似String.replace(/\({2,}[\s\S]*\){2,}/g, '(${rest})')
的东西?
答案 0 :(得分:4)
我建议您尝试经典的tokenize-parse-generate工作流,而不要使用正则表达式。想法是将字符串解析为数据结构(在这种情况下为嵌套数组),简化该结构并从中生成一个新的字符串。
示例:
function tokenize(str) {
return str.match(/[()]|[^()]+/g);
}
function parse(toks, depth = 0) {
let ast = [];
while (toks.length) {
let t = toks.shift();
switch (t) {
case '(':
ast.push(parse(toks, depth + 1));
break;
case ')':
if (!depth)
throw new SyntaxError('mismatched )');
return ast;
default:
ast.push(t);
}
}
if (depth) {
throw new SyntaxError('premature EOF');
}
return ast;
}
function generate(el) {
if (!Array.isArray(el))
return el;
while (el.length === 1 && Array.isArray(el[0]))
el = el[0];
return '(' + el.map(generate).join('') + ')';
}
//
let test = `
(((foo)))
((foo))
(foo)
(foo (bar))
((foo b)ar)
((((foo)) bar))
((((((foo))bar))baz))
((((((((foo))))))))
foo
`;
for (let s of test.trim().split('\n'))
console.log(s, '=>', generate(parse(tokenize(s))));
答案 1 :(得分:2)
您可以尝试以下方法:
'(((foo))) => (foo)'.replace(/(\({2,})([a-zA-Z]*)(\){2,})/g, '($2)')
或一般形式:
str.replace(/(\({2,})([a-zA-Z]*)(\){2,})/g, '($2)')
我对您的正则表达式做了一些更改,以将正则表达式匹配的文本作为编号组捕获,因此可以在string.replace()
中使用反向引用。
因此,基本上,您有3个组,您可以引用它们:
Happy Hacking:)
答案 2 :(得分:-1)
这应该做到。
DECLARE @DBId INT
SELECT @DBId=DB_ID()
DBCC PAGE(@DBId ,1,6,3) WITH TABLERESULTS