如何创建一个能够匹配任意内容(包括空格)的表达式?
例子:
正则表达式: 我买了_____只羊。
匹配结果: 我买了羊。我买了一只羊。我买了五只羊。
我尝试使用 (.*)
,但是好像不起作用。
如何创建一个能够匹配任意内容(包括空格)的表达式?
例子:
正则表达式: 我买了_____只羊。
匹配结果: 我买了羊。我买了一只羊。我买了五只羊。
我尝试使用 (.*)
,但是好像不起作用。
通常点号匹配除了换行以外的任何字符。
所以如果.*
无法工作,请设置“点号也匹配换行符”选项(或使用(?s).*
)。
如果您使用的是JavaScript,它没有“dotall”选项,请尝试使用[\s\S]*
。这意味着“匹配任意数量的空格或非空格字符”- 实际上是“匹配任何字符串”。
另一个仅适用于JavaScript(并不被任何其他正则表达式支持)的选项是[^]*
,它也匹配任何字符串。但[\s\S]*
似乎更广泛地使用,可能因为它更具可移植性。
.*
不匹配换行符\n
,但会匹配仅包含\n
的字符串,因为它匹配0个字符。 - Toto(?s).*
对我来说有效,匹配包括换行符在内的所有内容。 - Gujarat Santana(.*?)
可以匹配任何内容 - 我已经使用它好几年了。
(“title”:“.*?”)
- SCabralO[\s\S]*
或 [^]*
。 - Jeff Huijsmansw+
不够用,我最终会使用.+
。幸运的是,它还没有对我造成影响。 - Tushar请选择并记住以下1个选项!!! :)
[\s\S]*
[\w\W]*
[\d\D]*
说明:
\s
:空白字符,\S
:非空白字符
\w
:单词字符,\W
:非单词字符
\d
:数字字符,\D
:非数字字符
(如果您想匹配1个或多个字符[而不是0个或更多字符],可以将*
替换为+
。)
额外加分内容编辑:
如果您想在一行中匹配所有内容,可以使用以下方法:
[^\n]+
Explanation:试一下这个:
I bought (.* )?sheep
甚至可以
I bought .*sheep
/[\s\S]*/
对我来说可以匹配任何内容,忽略换行符。 - Marco Mesen因为.
可以匹配除换行符外的任何单个字符。
所以,要匹配任何内容,您可以像这样使用:(.|\n)*?
希望能对您有所帮助!
?
使前面的量词变成懒惰模式,导致匹配尽可能少的字符(在这种情况下是零!) - Sam\n
) 行尾的情况,而不适用于 CR (\r
) 或 CRLF (\r\n
) 行尾。 - Sam/s
(dotAll)标志。使用/s
标志,点号.
将匹配任何字符,包括换行符。
console.log("line_1\nline_2".match(/.+/s))
注意:目前并非所有浏览器都支持此功能。
对于JavaScript来说,最好、最简单的答案似乎是/.\*/
。
正如其他人所建议的,/(.*?)/
也可以工作,但是/.\*/
更简单。据我所见,模式中的()
和结尾的?
都不需要,以匹配绝对任何东西(包括空字符串)
非解决方案:
/[\s\S]/
不能匹配空字符串,因此它不是解决方案。
/[\s\S]\*/
也可以匹配空字符串。但是它有一个问题:如果你在代码中使用它,那么你不能注释这样的代码,因为*/
被解释为注释结束符。
/([\s\S]\*)/
可以工作,并且没有注释问题。但它比/.*/
更长、更复杂。
。
将匹配任何字符,包括换行符:
const regExAll = /.*/s; //notice the 's'
let str = `
Everything
in this
string
will
be
matched. Including whitespace (even Linebreaks).
`;
console.log(`Match:`, regExAll.test(str)); //true
console.log(`Index Location:`, str.search(regExAll));
let newStr = str.replace(regExAll,"");
console.log(`Replaced with:`,newStr); //Index: 0
.*
应该可以工作。你能复制粘贴你实际的代码吗? - Jacob Eggers(?s:.)
- 内联修饰符组 匹配包括换行符在内的任何字符。在您的情况下,它应该是这样的:(?s:.*?)
。摘自 Wiktor Stribiżew 的答案。 - Dmitriy Zub