为什么这个 JavaScript 正则表达式会给我一个语法错误

Why does this javascript regex give me a syntax error?

本文关键字:一个 语法 错误 JavaScript 正则表达式 为什么      更新时间:2023-09-26

我正在尝试使用Jeff Atwood关于检测链接的博客文章中的正则表达式:

'(?'bhttp://[-A-Za-z0-9+&@#/%?=~_()|!:,.;]*[-A-Za-z0-9+&@#/%=~_()|]

但是,此JS代码中断并给出了SyntaxError: Unexpected token ILLEGAL

var myRe = '(?'bhttp://[-A-Za-z0-9+&@#/%?=~_()|!:,.;]*[-A-Za-z0-9+&@#/%=~_()|];
var myArray = myRe.exec("http://en.wikipedia.org/wiki/PC_Tools_(Central_Point_Software)");
console.log(myArray);

这是因为您的JS实际上是无效的。这不是有效的正则表达式文本:

var myRe = '(?'bhttp://[-A-Za-z0-9+&@#/%?=~_()|!:,.;]*[-A-Za-z0-9+&@#/%=~_()|];

在 JS 中,正则表达式文本以 / 开头,同样以 / 结尾,因此您可以将代码更改为以下内容:

var myRe = /'(?'bhttp:'/'/[-A-Za-z0-9+&@#'/%?=~_()|!:,.;]*[-A-Za-z0-9+&@#'/%=~_()|]/;

它应该可以工作(您可能需要打开控制台选项卡。请注意,由于 / 是文字终端,因此您必须使用 ' 字符转义 RegExp 中的任何/字符。

尝试将其声明为正则表达式变量(在//内):

var myRe = /'(?'bhttp:'/'/[-A-Za-z0-9+&@#/%?=~_()|!:,.;]*[-A-Za-z0-9+&@#/%=~_()|]/;

并查看一些文档。