不在引号中时正则表达式不匹配

时间:2014-06-29 11:36:57

标签: javascript regex

我正在寻找一个匹配双空格的JS Regex

([-!$%^&*()_+|~=`{}\[\]:";'<>?,.\w\/]\s\s[^\s])

RegEx应该匹配双倍空格(当包含在引号内时,不包括行的开头或结尾)。

对此的任何帮助将不胜感激。

例如:

var x = 1,
    Y = 2;

会好的
var x =  1;

不会(=符号后面超过一个空格。

如果是

console.log("I am some console  output");

会很好,因为它在双引号内

2 个答案:

答案 0 :(得分:4)

此问题是此问题中向"regex-match a pattern, excluding..."

解释的技术的典型案例

我们可以通过一个非常简单的正则表达式解决它:

(["'])  \1|([ ]{2})

交替|的左侧与完整' '" "匹配。我们将忽略这些匹配。右侧匹配并捕获组2的双重空格,我们知道它们是正确的,因为它们与左侧的表达式不匹配。

该程序展示了如何在JavaScript中使用正则表达式,我们将在其中检索第2组捕获:

var the_captures = []; 
var string = 'your_test_string'
var myregex = /(["'])  \1|([ ]{2})/g;
var thematch = myregex.exec(string);
while (thematch != null) {
    // add it to array of captures
    the_captures.push(thematch[2]);
    document.write(thematch[2],"<br />");    
    // match the next one
    thematch = myregex.exec(string);
}

Perl和PCRE的整齐变化

在最初的答案中,我没有注意到这是一个JavaScript问题(后来添加了标签),所以我给出了这个解决方案:

(["'])  \1(*SKIP)(*FAIL)|[ ]{2} 

在这里,感谢(*SKIP)(*FAIL)魔法,我们可以直接匹配空格,而不需要捕获组。

请参阅demo

参考

答案 1 :(得分:-1)

简单的解决方案:

/\s{2,}/

匹配所有出现的一个或多个空格字符。如果需要匹配整行,但仅当它包含两个或多个连续的空格字符时才会匹配:

/^.*\s{2,}.*$/

如果空白不需要连续:

/^(.*\s.*){2,}$/