我有一个字符串,例如:
const str = "he**o *ow ar* you ***** ***?"
我只想匹配那些只包含星号的字符串,所以这个例子的结果是:
const output = ["*****", "***"]
我以为会是这样的:
const regex = /\b\*+\b/g
但是我认为单词边界不起作用,因为 * 不是单词字符。Regex绝对不是我的强项,所以这里有人能帮我吗?
fcg9iug31#
您可以使用
(?<=\W)\*+(?=\W)
说明:(?=\W)和(?=\W)的行为类似于\b(是零长度Assert,这意味着它们匹配位置但不匹配特定字符。与\b匹配单词char和非单词char之间的边界的方式相同,(?=\W)告诉引擎匹配前面没有字符的位置,(?=\W)告诉引擎匹配后面没有字符的位置。因为您希望整个单词都是“*”,所以匹配前后没有任何单词char的一组 * 是有意义的。工作示例如下:https://regex101.com/r/TQftpX/1
(?=\W)
在javascript中的用法:
const str = "he**o *ow ar* you ***** ***?"; const output = [... str.matchAll(/(?<=\W)\*+(?=\W)/g)].map(match => match[0]); // output === [ "*****", "***" ]
2izufjch2#
查看输入结束语或非单词:
(?<=^|\W)\*+(?=$|\W)
参见live demo。当全星号单词在任意一端时,这也将匹配,例如
**** foo ***
wpx232ag3#
对于此特定示例数据,另一个替代使用\b的选项可能是使用\B
\b
\B
\B\*+\B
参见regex101 demo如果你不想在a*****或*****a中得到部分匹配,你可以使用lookaroundsAssertnot *到左边和右边:
a*****
*****a
*
\B(?<!\*)\*+\B(?!\*)
参见另一个regex101 demo。
3条答案
按热度按时间fcg9iug31#
您可以使用
说明:
(?=\W)
和(?=\W)
的行为类似于\b(是零长度Assert,这意味着它们匹配位置但不匹配特定字符。与\b匹配单词char和非单词char之间的边界的方式相同,(?=\W)
告诉引擎匹配前面没有字符的位置,(?=\W)
告诉引擎匹配后面没有字符的位置。因为您希望整个单词都是“*”,所以匹配前后没有任何单词char的一组 * 是有意义的。工作示例如下:https://regex101.com/r/TQftpX/1
在javascript中的用法:
2izufjch2#
查看输入结束语或非单词:
参见live demo。
当全星号单词在任意一端时,这也将匹配,例如
wpx232ag3#
对于此特定示例数据,另一个替代使用
\b
的选项可能是使用\B
参见regex101 demo
如果你不想在
a*****
或*****a
中得到部分匹配,你可以使用lookaroundsAssertnot*
到左边和右边:参见另一个regex101 demo。