我必须删除一组以标记开头并以另一个标记结束的行。 我想找到所有这些文本,并使用正则表达式删除它们。问题是,正则表达式一次只匹配一行。我该怎么办?
答案 0 :(得分:4)
在大多数正则表达式解析器中,您可以将s
添加到结尾作为" dotall"修改。这将使.
匹配任何内容,包括换行符(通常不匹配)。
但是javascript中不存在dotall修饰符。相反,你有一个"伪 - dotall"通过使用预定义的字符类及其否定的修饰符 - 这两个事物共同匹配任何东西,包括换行符。规范示例是[\s\S]
(匹配任何空格或任何不是空格=匹配任何东西的东西)。但是任何角色类及其否定都会起作用(例如[\d\D]
也会起作用)。
因此,在您的情况下,如果您的起始令牌为S
且您的结束令牌为E
,则可以执行此操作:
string.replace(/S[\s\S]*?E/g, '')
两个注释:我使用g
或全局修饰符来替换所有实例。在[\s\S]*?
中,?
表示"匹配最短的序列" (非贪婪)。这样,它实际上将是分隔令牌的实例,而不是将第一个开始令牌和最后一个令牌之间的所有内容视为单个令牌。
答案 1 :(得分:1)
针对您的具体问题,您可以执行以下操作(示例):
>[^<]+<
^ ^ ^
| |__|__ End marker
|
Start marker
这将匹配开始标记>
和结束标记<
之间的所有内容,包括新行。选择您喜欢的开始标记和结束标记。如果您的结束标记或开始标记是多个字符,只需将其放在括号内,该括号不应计为捕获(?:yourmarkerhere)
。
string.replace(>[^<]+<, '')
答案 2 :(得分:-1)
在正则表达式模式的末尾使用s修改。添加's'可以使正则表达式匹配包含换行符的文本。
e.g。 '/ patternhere / s' 的
点击此处查看更多信息http://www.php.net/manual/en/reference.pcre.pattern.modifiers.php - 也适用于javascript。
答案 3 :(得分:-2)
我认为你应该尝试使用/ m修饰符。
直接用Google搜索:http://www.regular-expressions.info/modifiers.html 它说:
/ m启用“多线模式”。在这种模式下,插入符号和美元匹配 在主题字符串中的换行符之前和之后。