字符串可以包含任何内容,但字符串中必须包含一个星号(<class 'sympy.core.add.Add'>
),并且星号可以位于字符串中的任何位置。
此外,字符串不应包含任何空格。
以下是有效字符串:
*
以下是无效字符串:
test*
*_test
test*something
有人请帮我写上述场景的正则表达式。
答案 0 :(得分:3)
使用此RegEx:
^(?!(.*?\*){2,}|.*? |\*$).*?\*.*$
如果您希望它允许标签(所有其他空格),请使用\s
而不是文字空格():
^(?!(.*?\*){2,}|.*?\s|\*$).*?\*.*$
工作原理:
^ # String starts with ...
(?! # DO NOT match if ...
(.*?\*) # Optional Data followed by a *
{2,} # Multiple times (multiple *s)
| # OR
.*?\s # Optional Data followed by whitespace
| # OR
\*$ # * then the end of the string (i.e. whole string is just a *)
)
.*? # Optional Data before *
\* # *
.* # Optional Data after *
$ # ... String ends with
演示:
strings = [
'test*',
'*_test',
'test*something',
'test',
'*',
'test_**',
'**_test',
'test*something*',
'test *something',
'test *'
]
for (var i = 0; i < strings.length; i++) {
if (strings[i].match(/^(?!(.*?\*){2,}|.*?\s|\*$).*?\*.*$/)) {
document.write(strings[i] + '<br>')
}
}
&#13;
答案 1 :(得分:1)
您可以使用/^[^*\s]*\*[^*\s]*$/
来检查字符串,其中只包含一个星号且没有空格。如果只有一个星号无效,则应添加前瞻以检查是否存在两个字符,例如/^(?=.{2})[^*\s]*\*[^*\s]*$/
有些样本请参阅https://regex101.com/r/yE5zV2/1(进入单元测试)
答案 2 :(得分:0)
您可以使用:
var regex = /^([^ \*]|\s)*\*{1}([^ \*]|\s)*$/
var str1 = '*abcfkdsjfksdjf';
var str2 = 'abcfkds*jfksdjf';
var str3 = 'abcfkdsjfksdjf*';
var str4 = 'abcfkdsjfksdjf';
var str5 = 'abcf*kdsjfk*sdjf';
console.log(regex.test(str1)); // returns true;
console.log(regex.test(str2)); // returns true;
console.log(regex.test(str3)); // returns true;
console.log(regex.test(str4)); // returns false;
console.log(regex.test(str5)); // returns false;
答案 3 :(得分:0)
这些条件几乎不需要任何正则表达式(虽然检查空格时很好用)。
// This is the checking function
function checkStr(x) {
return (x.indexOf("*", x.indexOf("*")+1) === -1 && x.indexOf("*") > -1 && !/\s/.test(x));
}
// And this is the demo code
var valid = ["123*567", "*hereandthere", "noidea*"];
var invalid = ["123*567*", "*here and there", "noidea**", "kkkk"];
valid.map(x => document.body.innerHTML += "<b>" + x + "</b>: " + checkStr(x) + "<br/><b>");
invalid.map(x => document.body.innerHTML += "<b>" + x + "</b>: " + checkStr(x) + "<br/><b>");
POI为return (x.indexOf("*", x.indexOf("*")+1) === -1 && x.indexOf("*") > -1 && !/\s/.test(x));
:
x.indexOf("*", x.indexOf("*")+1) === -1
- 确保没有2个星号x.indexOf("*") > -1
- 确保至少有一个*
!/\s/.test(x)
- 确保字符串中没有空格。