我如何使一个表达式匹配绝对任何东西(包括空白)?例子:

Regex:我买了_____羊。

火柴:我买了羊。我买了一只羊。我买了五只羊。

我尝试使用(.*),但似乎没有工作。


当前回答

Regex: /I bought.*sheep./ Matches - the whole string till the end of line I bought sheep. I bought a sheep. I bought five sheep. Regex: /I bought(.*)sheep./ Matches - the whole string and also capture the sub string within () for further use I bought sheep. I bought a sheep. I bought five sheep. I boughtsheep. I bought a sheep. I bought fivesheep. Example using Javascript/Regex 'I bought sheep. I bought a sheep. I bought five sheep.'.match(/I bought(.*)sheep./)[0]; Output: "I bought sheep. I bought a sheep. I bought five sheep." 'I bought sheep. I bought a sheep. I bought five sheep.'.match(/I bought(.*)sheep./)[1]; Output: " sheep. I bought a sheep. I bought five "

其他回答

通常点匹配除换行符以外的任何字符。

因此,如果。*不起作用,设置“点也匹配换行符”选项(或使用(?s).*)。

如果您正在使用JavaScript,它没有“dotall”选项,请尝试[\s\ s]*。这意味着“匹配任意数量的空白或非空白字符”——有效地“匹配任何字符串”。

另一个只适用于JavaScript的选项是[^]*,它也匹配任何字符串。但是[\s\ s]*似乎使用得更广泛,可能是因为它更便于携带。

试试这个:

I bought (.* )?sheep

甚至

I bought .*sheep

一个选项是空正则表达式,在JavaScript中表示为/(?:)/。(也可以使用new RegExp())。逻辑上,一个空正则表达式应该匹配在任何位置包含“空”的字符串——当然是所有的字符串。

请参阅这个SO问题和这篇博客文章进行讨论和更多细节。

我建议使用/(?=.*…)/g

例子

const text1 = 'I am using regex';
/(?=.*regex)/g.test(text1) // true

const text2 = 'regex is awesome';
/(?=.*regex)/g.test(text2) // true

const text3 = 'regex is util';
/(?=.*util)(?=.*regex)/g.test(text3) // true

const text4 = 'util is necessary';
/(?=.*util)(?=.*regex)/g.test(text4) // false because need regex in text

使用regex101进行测试

我用这个:(.|\n)+对我来说就像一个魅力!