Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/427.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为javascript准备正则表达式_Javascript_Regex - Fatal编程技术网

为javascript准备正则表达式

为javascript准备正则表达式,javascript,regex,Javascript,Regex,我制作了一个正则表达式,它完全符合我在RegExr中测试它时的要求: ^https?:\/\/(www\.)?(test\.yahoo\.com|sub\.yahoo\.com)?(?!([a-z0-9]+\.)?(localhost|yahoo\.com))(.*)? 但是,当我在javascript中测试它时,它说表达式无效。经过数小时的调试,我发现这个表达式可以在javascript中工作: ^https?:\/\/(www\.)?(test\.yahoo\.com|sub\.yahoo

我制作了一个正则表达式,它完全符合我在RegExr中测试它时的要求:

^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日更新

很抱歉,没有相关信息。我使用Regexp的方式是通过jQuery扩展,它允许我选择使用Regexp。可以在此处看到脚本:

我正在尝试使用的具体代码是:

$('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( ... );

您将匹配哪些字符串?举几个例子可能会有所帮助。你的目标是什么?我想,你不能强迫别人像你那样做!您是否尝试使用
RegExp
而不是
RegExr
您没有阅读我的答案中解释当正则表达式表示为字符串时,必须将其所有反斜杠加倍的部分。我阅读了-尽管这更正确,但它并没有解决我面临的无效表达式问题。我完全知道它是有效的-因此在使用例如RegExr时有效。然而,不幸的是,当我使用javascript时,它不起作用。我已经更新了我如何使用它的全部细节。我知道。因此,您想让我创建一个新问题,在这个问题上,我更具体一点,说使用jQuery选择器而不是javascript?您是否尝试过更改代码,使正则表达式中的反斜杠加倍(“而不是“\””)?这几乎肯定是问题所在。