查找字符串中的部分但替换整个案例正则表达式?

时间:2016-01-08 01:23:05

标签: javascript regex string replace

假设我有一个文件的内容为字符串:

@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';

DEMO:https://jsfiddle.net/0z8o4uss/

1 个答案:

答案 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;