9

我有一个正则表达式来获取以下之间的所有内容"*"

str = "Donec sed odio dui. *Nullam id dolor id nibh ultricies vehicula ut*"
str.match(/\*(.*)\*/)[1]

我希望匹配能够包含换行符。我该怎么做?

4

2 回答 2

15

您需要使用m允许点匹配新行的选项:

Donec sed odio dui. *Nullam id dolor id 
nibh ultricies vehicula ut*

正则表达式 str.match(/\*(.*)\*/m)[1]实时示例:http ://www.rubular.com/r/11u9TreEOL

您的表达式将捕获第一个和最后一个*符号之间的文本,但是如果您想捕获每组之间的所有文本,*那么您需要使.*贪婪的

str.match(/\*(.*?)\*/m)[1]现场示例http://www.rubular.com/r/rBLOnwy3By

或者您可以告诉它简单地匹配所有非*字符,例如,注意m不需要该选项,因为换行符将由否定[^*]字符类匹配:

str.match(/\*([^*]*)\*/)[1]现场示例http://www.rubular.com/r/dhQzZ58ZzM

于 2013-07-12T13:07:37.027 回答
4

m修饰符放在正则表达式之后,例如/\*(.*)\*/m.

顺便说一句,您的正则表达式可以改进为:

str[/(?<=\*).*(?=\*)/m]
于 2013-07-12T12:15:27.040 回答