javascript 仅包含一个星号(*)的字符串的正则表达式

x33g5p2x  于 2023-06-28  发布在  Java
关注(0)|答案(4)|浏览(125)

字符串可以包含任何内容,但必须在整个字符串中有一个星号(*),并且该星号可以位于字符串中的任何位置。
此外,字符串不应包含任何空格。
以下是有效字符串:

test*
*_test
test*something

以下是无效字符串:

test_**
**_test
test*something*
test *something
test *
testsomething
*

请帮助我为上面的场景写一个正则表达式。

1dkrff03

1dkrff031#

使用此RegEx:

^(?!(.*?\*){2,}|.*? |\*$).*?\*.*$

Live Demo on Regex101
如果你想让它允许制表符(所有其他空格),使用\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>')
  }
}
2wnc66cl

2wnc66cl2#

您可以使用/^[^*\s]*\*[^*\s]*$/来检查一个字符串,该字符串只包含一个星号并且不包含空格。如果只有一个星号无效,则应添加一个lookahead以检查是否存在至少两个字符,如/^(?=.{2})[^*\s]*\*[^*\s]*$/
一些示例参见https://regex101.com/r/yE5zV2/1(转到单元测试)

7dl7o3gd

7dl7o3gd3#

您可以使用以下命令:

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;
628mspwn

628mspwn4#

这些条件几乎不需要任何正则表达式(不过在检查空格时使用很好)。

// 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)-确保字符串中没有空格。

相关问题