繁体   English   中英

匹配带有前导或尾随星号的行的正则表达式

[英]Regex that matches lines with a leading or trailing asterisk

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

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]+.\*$

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

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

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

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

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

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

如果您在字符串中间也不需要任何星号 - 使用Pierre François答案。

如果星号在字符串中间被接受,试试这个:

 var tests = [ "foo BAR, FOO1*", "*FOO, bar% foo", '*foo). BAR", fOo*', "**foo BAR foo", "*foo bar foo**", "foo bar * foo", "foo bar foo"]; var regex = /(^\*(?.\*)?*(?<?\*)\*?$)|(^\*.(?;\*).*(.<.\*)\*$)/; tests.forEach(t => console.log(regex.test(t)));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM