javascript - 为javascript准备一个正则表达式

标签 javascript regex

我已经制作了这个正则表达式,它在我测试它时完全符合我的要求,例如正则表达式:

^https?:\/\/(www\.)?(test\.yahoo\.com|sub\.yahoo\.com)?(?!([a-z0-9]+\.)?(localhost|yahoo\.com))(.*)?

然而,当我在 javascript 中测试它时,它说表达式无效。经过几个小时的调试,我发现这个表达式在 javascript 中有效:

^https?:\/\/(www\.)?(test\.yahoo\.com|sub\.yahoo\.com)?(?![a-z0-9]+\.)?(localhost|yahoo\.com)(.*)?

但是这并没有达到我想要的效果(再次在 RegExr 中测试)。

为什么我不能在 javascript 中使用第一个表达式?我该如何解决?

7 月 25 日更新

抱歉缺少信息。我使用正则表达式的方式是通过一个 jQuery 扩展,它让我选择使用正则表达式。脚本可以在这里看到:http://james.padolsey.com/javascript/regex-selector-for-jquery/

我试图开始工作的具体代码是:

$('a:regex(href, ^https?:\/\/(www\.)?(test\.yahoo\.com|sub\.yahoo\.com)?(?!([a-z0-9]+\.)?(localhost|yahoo\.com))(.*)?)').live('click', function(e) {

包含链接的 jQuery 插件之后。我正在测试的文本字符串是:

它应该匹配“http://google.dk”、“http://test.yahoo.com”和“http://sub.yahoo.com/lalala”的地方 - 它在使用时会这样做RegExr 但使用 jQuery 插件失败(无效表达式)。

最佳答案

第一个正则表达式不是无效的:

var regexp = /^https?:\/\/(www\.)?(test\.yahoo\.com|sub\.yahoo\.com)?(?!([a-z0-9]+\.)?(localhost|yahoo\.com))(.*)?/;

工作正常。

如果要从字符串实例化表达式,则必须将所有反斜杠加倍:

var regexp = new RegExp("^https?:\\/\\/(www\\.)?(test\\.yahoo\\.com|sub\\.yahoo\\.com)?(?!([a-z0-9]+\\.)?(localhost|yahoo\\.com))(.*)?");

当您从字符串开始时,您必须考虑到字符串常量本身使用反斜杠作为引用机制这一事实,因此将进行两次 评估:一次作为字符串,以及一个作为正则表达式。

编辑 — 好的,我想我明白了问题所在。考虑到 Sizzle 解析选择器的方式,您尝试使用的那个插件只是在尝试做一些不会起作用的事情。换句话说,问题不在于您的正则表达式,而在于整个选择器。它甚至还不足以解析正则表达式。

具体来说,它似乎是正则表达式中的嵌套括号。简单到

$('a:regex(href, ((abc)))')

导致错误。您可以改为执行以下操作:

$('a').filter(function() {
  return /^https?:\/\/(www\.)?(test\.yahoo\.com|sub\.yahoo\.com)?(?!([a-z0-9]+\.)?(localhost|yahoo\.com))(.*)?/.test(this.href);
}).whatever( ... );

关于javascript - 为javascript准备一个正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11650354/

相关文章:

javascript - 仅当包含在正则表达式匹配中时才替换正则表达式?

php - 我想让用户使用可选面板更改 CSS。我应该怎么做?

javascript - 从 ajax 页面调用页面触发事件的最佳实践

javascript - 正则表达式确定 URL 视频 ID

php - 你如何实现一个好的脏话过滤器?

java - 正则表达式掩盖电话号码

javascript - 我可以使用哪些技术来使 JS 密集型页面在移动设备上具有高性能?

javascript - Angular JS 表单模型值更改为数组

javascript - 如何绕过 Puppeteer 阻止系统

C# 正则表达式检索层次字符串