首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >javascript正则表达式--另一种选择?

javascript正则表达式--另一种选择?
EN

Stack Overflow用户
提问于 2011-09-11 12:06:13
回答 5查看 115.6K关注 0票数 151

下面是一个在大多数regex实现中都工作得很好的regex:

代码语言:javascript
复制
(?<!filename)\.js$

对于除filename.js之外的以.js结尾的字符串,这将与.js匹配

Javascript没有正则表达式后视功能。有没有人能把一个替代的正则表达式放在一起,用javascript实现同样的结果?

这里有一些想法,但需要帮助器函数。我希望通过一个正则表达式来实现它:http://blog.stevenlevithan.com/archives/mimic-lookbehind-javascript

EN

回答 5

Stack Overflow用户

发布于 2011-09-11 14:07:29

编辑:从ECMAScript 2018开始,lookbehind assertions (even unbounded) are supported natively

在以前的版本中,您可以执行以下操作:

代码语言:javascript
复制
^(?:(?!filename\.js$).)*\.js$

这会显式地执行后视表达式隐式执行的操作:如果后视表达式加上后面的正则表达式不匹配,则检查字符串的每个字符,然后才允许该字符匹配。

代码语言:javascript
复制
^                 # 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

另一个编辑:

我很痛苦地说(特别是因为这个答案已经得到了很多人的支持),有一种更容易的方法来实现这个目标。不需要在每个字符处检查先行:

代码语言:javascript
复制
^(?!.*filename\.js$).*\.js$

同样有效:

代码语言:javascript
复制
^                 # 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
票数 162
EN

Stack Overflow用户

发布于 2014-11-30 21:50:01

假设您想查找前面没有unsigned的所有int

支持负向回溯:

代码语言:javascript
复制
(?<!unsigned )int

如果不支持负向回溯:

代码语言:javascript
复制
((?!unsigned ).{9}|^.{0,8})int

基本的想法是抓住n个前面的字符,并排除具有负先行匹配的匹配,但也匹配没有前面n个字符的情况。(其中n是后视的长度)。

所以有问题的正则表达式:

代码语言:javascript
复制
(?<!filename)\.js$

将转化为:

代码语言:javascript
复制
((?!filename).{8}|^.{0,7})\.js$

您可能需要使用捕获组来找到您感兴趣的字符串的确切位置,或者您不想用其他东西替换特定部分。

票数 26
EN

Stack Overflow用户

发布于 2015-11-27 02:08:25

如果您可以向前看,但可以向后看,您可以先反转字符串,然后进行向前看。当然,还需要做更多的工作。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7376238

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档