und*_*ror 17 javascript regex negative-lookahead
嗨,我是正则表达式的新手,这可能是一个非常简单的问题(希望如此).
我试图使用一种解决方案3种字符串
我在尝试什么(让字符串为str):
str.match(/(.*)(?!%*)/i)[1]
Run Code Online (Sandbox Code Playgroud)
在我的脑海中听起来像"匹配任何事物的任何实例,直到'%'如果找到它,或者只是匹配任何东西"
在萤火虫的头脑中,它似乎听起来更像是"只是匹配任何东西而完全无视负面前瞻".也是为了让它变得懒惰 - (.*)?似乎没有帮助.
让我们忘记一下,在这种特殊情况下,我只是匹配数字,所以/\d*/我会这样做.我试图了解一般规则,以便我可以随时应用它.
有人会这么善意帮助我吗?
ken*_*ytm 27
怎么样更简单
str.match(/[^%]*/i)[0]
Run Code Online (Sandbox Code Playgroud)
这意味着,匹配零或多个字符,这不是一个%.
编辑:如果需要解析到</a>,那么你可以分析一个序列PF字符,其次</a>,然后再丢弃</a>,这意味着你应该使用积极前瞻的,而不是消极的.
str.match(/.*?(?=<\/a>|$)/i)[0]
Run Code Online (Sandbox Code Playgroud)
这意味着:懒惰地匹配零个或多个字符,直到达到</a>字符串的一个或结尾.
注意,这*?是一个单一的运算符,(.*)?是不一样的.*?.
(并且不像往常那样使用单个正则表达式解析HTML.)
我想这就是你要找的东西:
/(?:(?!%).)*/
Run Code Online (Sandbox Code Playgroud)
将.匹配任何字符,但仅将负先行,(?!%),确认该字符不是%.请注意,当sentinel是单个字符时%,您可以使用否定字符类,例如:
/[^%]*/
Run Code Online (Sandbox Code Playgroud)
但对于像</a>你这样的多角色哨兵,你必须使用前瞻性方法:
/(?:(?!</a>).)*/i
Run Code Online (Sandbox Code Playgroud)
这实际上是在说"一次匹配零个或多个字符,但如果下一个字符结果是序列的开头,</a>或者</A>停止而不消耗它".
| 归档时间: |
|
| 查看次数: |
32658 次 |
| 最近记录: |