有人可以帮忙吗?我需要对一个字符串进行排序,以检查a-z中任何单个字符 NOT 是否被双方的加号包围,具体请帮帮忙?
因此,例如,我将获得至少1个字符长的字符串,如:
Input = "+d+=3=+s+" (returns "true"--all chars are wrapped in pluses)
,
或Input = "f++d+ (returns "false"--the 'f' is not bordered.)
从上面我想自己返回一个true或false值,所以我将使用regex.test(str)函数来实现。
re:到目前为止我尝试过的例子 - > /\b*\w\b*/g;, /[^+]|\=\w[^+]|\=\/g;
答案 0 :(得分:0)
由于JavaScript没有后视,而不仅仅是直接regex.text(str)
,我认为你可能需要一些非常轻微更复杂。
如果您删除了+
所包围的所有字符,那么如果结果中有任何字符,则需要false
结果,如果不希望true
。所以:
if (!/[a-z]/.test(str.replace(/\+[a-z](?:\+[a-z])*\+/g, ""))) {
// All characters surrounded by `+` (or there were none to start with)
} else {
// Some unbounded
}
这个表达有点复杂,所以:
\+
- 文字+
(系列中的第一个)[a-z]
- 后跟一个字符a-z (?:\+[a-z])*
- 后跟零次或多次出现的文字+
和字符a-z \+
- 文字+
(系列的最终结尾之一)要处理+b+
以及+b+b+b+b+
。
如果字符串中没有任何az字符,则会给出误报,因此如果可能,请提前检查,例如:
if (!/[a-z]/.test(str)) {
// String has no a-z characters at all
} else if (!/[a-z]/.test(str.replace(/\+[a-z](?:\+[a-z])*\+/g, ""))) {
// Has a-z characters, all of them surrounded by `+`
} else {
// Has a-z characters, at least one not surrounded by `+`
}