Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 对特定正则表达式的澄清_Javascript_Regex - Fatal编程技术网

Javascript 对特定正则表达式的澄清

Javascript 对特定正则表达式的澄清,javascript,regex,Javascript,Regex,我尝试了JavaScript中的CoderByte(简单符号)挑战。来自CoderByte: 使用JavaScript语言,具有SimpleSymbolsstr函数 获取正在传递的str参数并确定它是否为 通过返回字符串true或false可接受的序列。这个 str参数将由带多个字母的+和=符号组成 在它们之间,即++d++=+c++==a,并且每个字符串都为真 字母必须用+符号包围。那么左边的字符串 这是错误的。该字符串将不为空,并且至少具有 一封信 我的解决方案: function simp

我尝试了JavaScript中的CoderByte(简单符号)挑战。来自CoderByte:

使用JavaScript语言,具有SimpleSymbolsstr函数 获取正在传递的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;
}
我很难理解这里使用的正则表达式是如何工作的。理论上,我理解:

g modifier=>检查所有匹配项 i modifier=>不区分大小写的检查 a-z=>检查字符串是否仅包含字母 \+=>表示加号 |=>匹配备选方案1或备选方案2 因此,如果参考上述内容,我理解有两个匹配条件:

[^\+][a-z] [a-z][^\+] 因此,对于测试输入,例如+x+y+z+。我的理解正确吗?它检查匹配的方式如下:+x=>x+=>+y=>y+=>+z=>z+

进一步澄清这个正则表达式将非常有帮助

谢谢。

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

是你的朋友! 从技术上讲,你所说的是对的

[^+]匹配除加号以外的所有内容。现在正则表达式表示,如果有一个字母前面没有+或后面没有加号,则返回正则表达式

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

还要注意'='+str+'=',这确保如果字符串以字母开头或结尾,正则表达式将匹配。
return ('=' + str + '=').match(/([^\+][a-z])|([a-z][^\+])/gi) === null;