假设一个正则表达式,用于测试任何包含子字符串
hello
的字符串,后面跟着任何不以 !
或多个 !
开头的字符串。
一些例子以便理解:
var regExp = /someExpression/;
regExp.test("hello"); // → true
regExp.test("hello!"); // → false
regExp.test("hello!!"); // → false
regExp.test("hello!sdkfjhsdfjkh"); // → false
regExp.test("hellos!dkfjhsdfjkh"); // → true
regExp.test("hello-!"); // → true
regExp.test("hello w34~342`!!"); // → true
我尝试了几种方法,以下是最佳方案:
var regExp = /.*hello[^!].*/;
这个正则表达式在我所能想到的所有情况下都能很好地工作,但有一种情况除外:"hello"
。
在这种情况下,[^!]
期望一个字符。
如何改进这个正则表达式,使它也适用于这种情况?
非常感谢任何形式的帮助。
编辑 - 加分项:
同样适用于由!
前导的hello
,以使hello
被接受,但!hello
不被接受。
.*
有用吗?为什么?请注意,使用的方法是test
。 - Casimir et Hippolyte!
为前缀的 hello 找出相同的原则。是否有类似于回溯的东西?(这也在编辑中添加到问题中) - Selfish(^|[^!])hello
,然后使用JS字符串和其他方法来操作匹配。 - Wiktor Stribiżew