我有正则表达式here at scriptular.com
/(?=.*net)(?=.*income)(?=.*total)(?=.*depreciation)/i
如何使正则表达式成功匹配字符串?
如果字符串中没有换行符,则正则表达式会成功。我可以删除它们......但我不愿意。
答案 0 :(得分:2)
1。)dot匹配除换行符之外的任何字符。如果所需的单词在第一行之后的行中匹配,则不会跳过换行符。在许多正则表达式中有 dotall 或单行 s
- flag可用于使点也匹配换行符但遗憾的是不在JS Regex中
变通办法是使用包含任何字符的character class。例如[\s\S]
任何空格字符 \s
以及任何的任何非空格 \S
或[\w\W]
单词字符以及任何非单词字符甚至[^]
而不是而不是点。
2。)Anchor向^
字符串开始的前瞻,因为它不想在字符串中的任何位置重复前瞻。这将大大提高性能。
3。)使用lazy matching对每个单词的第一场比赛感到满意。
/^(?=[\s\S]*?net)(?=[\s\S]*?income)(?=[\s\S]*?total)(?=[\s\S]*?depreciation)/i
See demo at regex101(不知道为什么这在你的演示工具中不起作用)
此外,您可以在单词周围使用\b
word boundaries,以确保net
,brunet
中的network
不匹配...因此正则表达式变为{ {1}} ...