如何在JavaScript中使用包含特殊字符的正则表达式

时间:2015-06-03 09:09:46

标签: javascript regex

对不起,今天早上可能很蠢,但我对正则表达式了解不多,但是创建了我想用https://regex101.com/

的东西

但是......我不能先使用他们在Javascript中建议的代码而不先逃避它。

这是正则表达式:(?<=color:\s)([a-z]+)

其中,我想做什么(匹配颜色后的单词:在CSS文件中)

但是,他们建议在JS中使用的代码是:

var re = /(?<=color:\s)([a-z]+)/g; 
var str = ' color: black';
var m;

while ((m = re.exec(str)) !== null) {
    if (m.index === re.lastIndex) {
        re.lastIndex++;
    }
    // View your result using the m-variable.
    // eg m[0] etc.
}

第一行不起作用,所以我将其转义为:var re = /\(?<=color:\s\)([a-z]+)/i,它会停止Javascript错误,但不再匹配字符串。

我做错了什么?

顺便说一句......任何人都可以指出我要扩展这个正则表达式以排除任何后面的括号吗?我试图只获取颜色名称,所以“颜色:黑色;”应该匹配,“box-shadow:black ...... etc”应该匹配,但理想情况下,不应该是“color:rgb(... etc”

1 个答案:

答案 0 :(得分:0)

虽然there are workarounds

,但JS确实不支持后视镜
  • 反转字符串然后匹配启用前瞻
  • 使用捕获组
  • 使用带有re.lastIndex操作的while循环

在这种情况下,使用捕获组要容易得多:

&#13;
&#13;
var re = /\bcolor:\s*([a-z]+)/ig; 
var str = ' color: black';
var m;

while ((m = re.exec(str)) !== null) {
    if (m.index === re.lastIndex) {
        re.lastIndex++;
    }
  // m[1] is holding our value!
     document.getElementById("res").innerHTML = m[1];
}
&#13;
<div id="res"/>
&#13;
&#13;
&#13;