正則表達式換行我有一個正則表達式here at scriptular.com忽略不關心順序
/(?=.*net)(?=.*income)(?=.*total)(?=.*depreciation)/i
如何讓我的正則表達式匹配成功的字符串?
沒有字符串中的換行符,正則表達式會成功。我可以刪除他們......但我寧願不。
正則表達式換行我有一個正則表達式here at scriptular.com忽略不關心順序
/(?=.*net)(?=.*income)(?=.*total)(?=.*depreciation)/i
如何讓我的正則表達式匹配成功的字符串?
沒有字符串中的換行符,正則表達式會成功。我可以刪除他們......但我寧願不。
1.)dot與除換行符以外的任何字符匹配。它不會跳過換行符,如果所需的單詞在第一行之後將與行匹配。在很多正則表達式中,有dotall或單行s
- flag可用於使點也匹配換行符,但不幸的是不在JS正則表達式中。
解決方法是使用包含任何字符的character class。如[\s\S]
任何空白字符與任何非空白\S
或[\w\W]
任何字字符連同任何非單詞字符或沒有什麼而不是點甚至[^]
\s
在一起。
2.)Anchor向前看到^
字符串的開頭,因爲它不想在字符串中的任何位置重複lookahead。這將大大提高性能。
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)
...
你只想匹配這些單詞嗎? –
我不關心正則表達式匹配組,我只是想能夠使用regexObj.test(str)來查看字符串是否包含我想要的。是的,我只關心給出的例子的話。 – markain
在JS中沒有可用於使點匹配換行符的標誌。解決方法是使用['\ s \ S]','[\ w \ W]'或'[^]'](https://www.regex101.com/r/hEeXMg/1)。爲避免超時,也可以考慮通過在'*'量詞之後加'''來將前視圖錨定到'''start並使用[lazy matching](http://www.regular-expressions.info/repeat.html#lazy)。 –