匹配带有前导或尾随星号的行的正则表达式
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
基本上,你有两种情况(
第一种情况|
第二种情况)
在上面的正则表达式中表达的匹配项:
- 字符串以星号
^\*
开头,不包含星号 [^*]*
,并以一个或零个星号结尾 \*?$
- 字符串不包含任何星号
^[^*]*
除了最后一个字符 \*$
如果字符串中间不需要任何星号 - 使用 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)));
我需要匹配以单个星号字符开头或结尾的每一行,中间没有任何其他星号。
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
基本上,你有两种情况(
第一种情况|
第二种情况)
在上面的正则表达式中表达的匹配项:
- 字符串以星号
^\*
开头,不包含星号[^*]*
,并以一个或零个星号结尾\*?$
- 字符串不包含任何星号
^[^*]*
除了最后一个字符\*$
如果字符串中间不需要任何星号 - 使用 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)));