忽略不关心订单的正则表达式中的换行符

时间:2017-02-12 20:30:28

标签: javascript regex

我有正则表达式here at scriptular.com

/(?=.*net)(?=.*income)(?=.*total)(?=.*depreciation)/i

如何使正则表达式成功匹配字符串?

如果字符串中没有换行符,则正则表达式会成功。我可以删除它们......但我不愿意。

1 个答案:

答案 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,以确保netbrunet中的network不匹配...因此正则表达式变为{ {1}} ...