RegEx仅替换令牌中的第一次出现

时间:2016-06-15 22:13:45

标签: javascript regex

我有以下案例:想象你想在className中预先添加前缀THIS。你有以下可能的例子:

.class-name .class-name-whatever {}
.class-name-other {}

我正在使用以下RegExp并且效果很好

return text.replace(new RegExp('class-name', 'g'),`THIS.class-name`);

输出

THIS.class-name THIS.class-name-whatever {}
THIS.class-name-other {}

很好,但问题出在这里:

如果我有.class-name.class-name-other我希望以THIS.class-name.class-name-other而不是THIS.class-nameTHIS.class-name-other结束,我怎样才能定位.class-name的第一次出现。

我在其他RegExp中搜索过但无法找到解决方案。

---更新---------

也许我对我的问题不是很清楚抱歉。 我需要使用g因为我正在搜索并替换整个文本块作为示例:

查看以下示例.example.example--black将以THIS.example.THIS.example--black结尾,THIS.example.example--black

输入: .example {min-width: 20rem;padding: 2.5rem 0; } .example .example__line--extra-space {display: block;margin-top:1.5625rem;} .example .example__copyright a {border: 0; } .example.example--black a {color: white; } .example.example--black h3 {color: white; } @media only screen and (max-width: 46em) { .example .example__list--connect .example__connect__link {height: 2.625rem; width: 2.625rem; } .example .example__list--connect .example__connect__link img {width: 1rem; vertical-align: middle; } } 应在处理结束时添加THIS。每个.example ocurrence。

3 个答案:

答案 0 :(得分:1)

查找/(\.\s*example\s*[^{]*{)/
替换THIS$1

答案 1 :(得分:0)

'g'修饰符代表“全局”。只是失去它,正则表达式将仅应用于第一场比赛:

return text.replace(new RegExp('class-name'),`THIS.class-name`);
// HERE -----------------------------------^

答案 2 :(得分:0)

您可以将正则表达式更改为以下内容:

/class-name.*/g

哪个是贪婪的正则表达式,.匹配除换行符之外的所有内容:

text.replace(/class-name.*/g, 'THIS.$&');

/.../是一个正则表达式构造。另请注意,$&指的是整个匹配的字符串