假设我有一个文件的内容为字符串:
@import '/app/a';
@import '/app/b.development';
我需要匹配包含“development”一词的import语句。如果确实找到了,我需要删除整个语句,然后返回:
@import '/app/a';
所以我的问题是,在我发现它有“开发”这个词后,如何才能匹配整个import语句?
我设法匹配'development'字符串并替换它,但不是整个语句。
示例:
var string = "@import '/app/a'; @import '/app/b.development';";
var output = string.replace(/(development)/g, '');
document.body.innerHTML = output;
// outputs @import '/app/a'; @import '/app/b.';
// I want to output @import '/app/a';
答案 0 :(得分:2)
您可以使用以下正则表达式:
/[^;]*development[^;]*;|([^;]+;)/g
将所有匹配替换为第一个捕获组:
string.replace(/[^;]*development[^;]*;|([^;]+;)/g, '$1');
说明:
[^;]*development[^;]*;
- 匹配一个或多个非;
字符,后跟字符串'development',后跟一个或多个非;
个字符,后跟;
。< / LI>
|
- 与[^;]*development[^;]*;
或([^;]+;)
匹配的替代。([^;]+;)
- 捕获群组以匹配一个或多个非;
个字符,后跟;
。此表达式基本上匹配所有import语句,但是通过不在捕获组中捕获它来否定包含字符串'development'的每个import语句。
这会导致删除带有'development'字符串的import语句,因为它们被替换为空捕获组。
var string = "@import '/app/a'; @import '/app/b.development';@import '/test/';";
var output = string.replace(/[^;]*development[^;]*;|([^;]+;)/g, '$1');
document.body.textContent = output;