我有一个正则表达式here at scriptular.com
/(?=.*net)(?=.*income)(?=.*total)(?=.*depreciation)/i
如何使正则表达式成功匹配字符串?
字符串中没有换行符,正则表达式将会成功。我可以删除它们...但我宁愿不删除。
最佳答案
1.) dot匹配除换行符之外的任何字符。如果所需的单词在第一个单词之后的行中匹配,它不会跳过换行符。在许多正则表达式风格中,有 dotall 或 单行 s
- flag可用于使点也匹配换行符,但不幸的是不在 JS 正则表达式中。
解决方法是使用 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
... 中匹配,因此正则表达式变为 ^ (?=[\s\S]*?\bnet\b)
...
关于javascript - 忽略不关心顺序的正则表达式中的换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42192880/