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