我有一个正则表达式来抓取"*"
:
str = "Donec sed odio dui. *Nullam id dolor id nibh ultricies vehicula ut*"
str.match(/\*(.*)\*/)[1]
我希望匹配能够包含换行符。我该怎么办?
答案 0 :(得分:9)
您需要使用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
答案 1 :(得分:3)
将m
修饰符放在正则表达式/\*(.*)\*/m
之后。
顺便说一下,你的正则表达式可以改进为:
str[/(?<=\*).*(?=\*)/m]