[英]Cut multiline string with RegEx and javascript
我有示例文本:
var text = `class Eee {
test(){
console.log("123");
}
}
use(123, Eee);
class Ttt {
test(){
console.log("123");
}
}
use(456, Ttt);
class Ooo {
test(){
console.log("123");
}
}
use(111, Ooo);
`;
而且我不会得到部分文本,例如:
`class Ttt {
test(){
console.log("123");
}
}
use(456, Ttt);`
如果我使用正则表达式:
let result = text.match(/^class Ttt \{(.*)/gm);
我有结果: [ 'class ttt {' ]
如果我使用正则表达式:
let result = text.match(/^class Ttt \{(.*)\}/gm);
或者
let result = text.match(/^class Ttt \{(.*)use\([\b].Ttt\);/gm);
我有结果: null
。 我怎样才能得到我想要的整段文字,而不是第一行?
您指定了比赛应该从哪里开始,但您还必须指定应该在哪里结束。
例如,如果结尾在新行的开头,并且下一行应该是use(456, Ttt);
在其自己的:
^[^\S\n]*class Ttt {[^]*?\n\s*}\s*\n\s*use\(.*\);$
请注意, \s
也可以匹配换行符。
部分图案:
^
字符串开头[^\S\n]*
匹配不带换行符的可选空白字符class Ttt {
字面匹配[^]*?
尽可能少地匹配任何字符,包括换行符\n\s*}\s*
匹配可选空白字符之间的换行符和}
\nuse\(.*\);
匹配换行符并use(...);
$
字符串结尾 var text = `class Eee { test(){ console.log("123"); } } use(123, Eee); class Ttt { test(){ console.log("123"); } } use(456, Ttt); class Ooo { test(){ console.log("123"); } } use(111, Ooo); `; const regex = /^[^\S\n]*class Ttt {[^]*?\n\s*}\s*\n\s*use\(.*\);$/m; const m = text.match(regex); if (m) { console.log(m[0]); }
对于它的价值,这是一个非正则表达式版本:
'class ' + text.split('class ')[1]
var text = `class Eee { test(){ console.log("123"); } } use(123, Eee); class Ttt { test(){ console.log("123"); } } use(456, Ttt); class Ooo { test(){ console.log("123"); } } use(111, Ooo); `; console.log('class ' + text.split('class ')[1])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.