我在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 因此,如果参考上述内容,我理解有两种匹配条件:
([^\+][a-z])
([a-z][^\+])
因此,对于测试输入,例如&#34; + x + y + z +&#34;。我是否正确理解它检查匹配的方式如下:+ x =&gt; x + =&gt; + y =&gt; y + =&gt; + z =&gt; z +
对此RegEx的进一步澄清将非常有用。
感谢。
答案 0 :(得分:0)
[^\+]
表示任何不是加号的字符。 []
是一个字符组,字符组开头的^
表示否定/不。它只是说&#34;这个字符串是否包含任何不是加号的字符,后跟字母a-z?&#34;这意味着它不遵守规则。
答案 1 :(得分:0)
https://regex101.com/是你的朋友! 从技术上讲,你说的是正确的。
[^ +]匹配所有内容但加号。现在正则表达式说“如果有一个字母前面没有+或字母后面没有加号,则返回正则表达式”。
但是因为有“=== null”,只有在上面的正则表达式没有找到任何内容时它才会返回true。