dan*_*iel 133 javascript regex
这是一个在大多数正则表达式实现中都能正常工作的正则表达式:
(?<!filename)\.js$
Run Code Online (Sandbox Code Playgroud)
这匹配.js为一个以.js结尾的字符串,除了filename.js
Javascript没有正则表达式.是否有人能够组合一个替代正则表达式,实现相同的结果,并在JavaScript中工作?
这里有一些想法,但需要辅助功能.我希望用正则表达式实现它:http: //blog.stevenlevithan.com/archives/mimic-lookbehind-javascript
Tim*_*ker 145
编辑:从ECMAScript 2018开始,本机支持lookbehind断言(甚至无限制).
在以前的版本中,您可以这样做:
^(?:(?!filename\.js$).)*\.js$
Run Code Online (Sandbox Code Playgroud)
这明确地显示了lookbehind表达式隐式执行的操作:如果lookbehind表达式加上后面的正则表达式将不匹配,则检查字符串的每个字符,然后才允许该字符匹配.
^ # Start of string
(?: # Try to match the following:
(?! # First assert that we can't match the following:
filename\.js # filename.js
$ # and end-of-string
) # End of negative lookahead
. # Match any character
)* # Repeat as needed
\.js # Match .js
$ # End of string
Run Code Online (Sandbox Code Playgroud)
另一个编辑:
我很难说(特别是因为这个答案得到了很多支持),有一种更容易实现这一目标的方法.没有必要检查每个角色的前瞻:
^(?!.*filename\.js$).*\.js$
Run Code Online (Sandbox Code Playgroud)
同样有效:
^ # Start of string
(?! # Assert that we can't match the following:
.* # any string,
filename\.js # followed by filename.js
$ # and end-of-string
) # End of negative lookahead
.* # Match any string
\.js # Match .js
$ # End of string
Run Code Online (Sandbox Code Playgroud)
Ben*_*ate 60
^(?!filename).+\.js
适合我
测试:
正则表达式可以找到正则表达式的正确解释,以匹配不包含单词的字符串?
从1.5版本的javascript开始可以使用,所有主流浏览器都支持
更新以匹配filename2.js和2filename.js但不匹配filename.js
(^(?!filename\.js$).).+\.js
Kam*_*zot 25
我们假设你想找到所有int
没有前面的unsigned
:
支持负面观察:
(?<!unsigned )int
Run Code Online (Sandbox Code Playgroud)
不支持负面观察:
((?!unsigned ).{9}|^.{0,8})int
Run Code Online (Sandbox Code Playgroud)
基本上,想法是抓住前面的n个字符并排除与负前瞻的匹配,但也匹配没有前n个字符的情况.(其中n是后视的长度).
所以有问题的正则表达式:
(?<!filename)\.js$
Run Code Online (Sandbox Code Playgroud)
会转化为:
((?!filename).{8}|^.{0,7})\.js$
Run Code Online (Sandbox Code Playgroud)
您可能需要使用捕获组来查找您感兴趣的字符串的确切位置,或者您不希望用其他内容替换特定部分.
归档时间: |
|
查看次数: |
98202 次 |
最近记录: |