澄清特定的正则表达式

时间:2015-09-19 20:44:43

标签: javascript regex

我在JavaScript中尝试了CoderByte - 简单符号 - 挑战。来自CoderByte:

  

使用JavaScript语言,具有SimpleSymbols(str)功能   获取传递的str参数并确定它是否为   通过返回字符串true或false来接受序列。该   str参数将由带有多个字母的+和=符号组成   它们之间(即。++ d + === + c ++ == a)和每个字符串都是真的   字母必须用+符号包围。所以左边的字符串   会是假的。该字符串不会为空,至少会有   一封信。

我的解决方案:

function simpleSymbols(str) {
    var isSymbol = true;
    var output = " ";
    var symbol = " ";

    if (str.match(/[a-zA-Z]/).length != 0) {
        for (var i = 0; i <= str.length - 1; i++) {
            if ((str.charAt(i) >= 'A' && str.charAt(i) <= 'Z') ||
                (str.charAt(i) >= 'a' && str.charAt(i) <= 'z')) {
                if (i != str.length - 1) {
                    symbol = str[--i] + str[++i] + str[++i];

                    var rgx = new RegExp(/\+[a-zA-Z]\+/);

                    if (!(rgx.test(symbol))) {
                        isSymbol = false;
                        break;
                    }
                }
                else {
                    isSymbol = false;
                    break;
                }
            }
        }
    }
    else {
        isSymbol = false;
    }    

    return isSymbol;
}

这适用于所有测试用例。

在审核其他提交的代码时,我遇到了一份只需要一行代码的提交内容:

return ('=' + str + '=').match(/([^\+][a-z])|([a-z][^\+])/gi) === null;

我无法理解此处使用的RegEx如何运作。从理论上讲,我理解:

  • g modifier =&gt;检查所有比赛
  • i modifier =&gt;不区分大小写的检查
  • a-z =&gt;检查字符串是否只包含字母
  • \+ =&gt;是指加号
  • | =&gt;匹配 alternative1 alternative2

因此,如果参考上述内容,我理解有两种匹配条件:

  1. ([^\+][a-z])
  2. ([a-z][^\+])
  3. 因此,对于测试输入,例如&#34; + x + y + z +&#34;。我是否正确理解它检查匹配的方式如下:+ x =&gt; x + =&gt; + y =&gt; y + =&gt; + z =&gt; z +

    对此RegEx的进一步澄清将非常有用。

    感谢。

2 个答案:

答案 0 :(得分:0)

[^\+]表示任何不是加号的字符。 []是一个字符组,字符组开头的^表示否定/不。它只是说&#34;这个字符串是否包含任何不是加号的字符,后跟字母a-z?&#34;这意味着它不遵守规则。

答案 1 :(得分:0)

https://regex101.com/是你的朋友! 从技术上讲,你说的是正确的。

[^ +]匹配所有内容但加号。现在正则表达式说“如果有一个字母前面没有+或字母后面没有加号,则返回正则表达式”。

但是因为有“=== null”,只有在上面的正则表达式没有找到任何内容时它才会返回true。