首页 > 解决方案 > 匹配带有前导星号或尾随星号的行的正则表达式

问题描述

我需要匹配以单个星号字符开头或结尾的每一行,中间没有任何其他星号。

1.- foo BAR, FOO1*

2.- *FOO, bar% foo

3- *foo). BAR", fOo*

4.- **foo BAR foo

5.- *foo bar foo**

6.- foo bar * foo

7.- foo bar foo

我想匹配第 1 到第 3 行,其他行我不会匹配它们。

我的方法:

^[\*](?:[a-zA-Z0-9.!#$%&'+/=?^_`{|}~-\s])|^[a-zA-Z0-9.!#$%&'+/=?^_`{|}~-\s]+.\*$

但并非在所有情况下都有效。

标签: javascriptregexregex-negation

解决方案


为什么会出现这样的并发症?尝试:

(^\*[^*]*\*?$|^[^*]*\*$)

https://regex101.com/r/oOCSE5/6

基本上,您有两种情况,(第一种情况,|第二种情况),在上面的正则表达式中表示:

  1. 字符串以星号开头^\*,不包含星号[^*]*,并以一个或零个星号结束\*?$
  2. 字符串不包含任何星号^[^*]*,除了最后一个字符\*$

推荐阅读