JavaScript正则表达式对象

JavaScript正则表达式对象,javascript,regex,Javascript,Regex,我尝试用JavaScript编写一个简单的标记解析器。因此,我想检查[link content][link id]语法。我使用以下代码: data = data.replace( /\[(.*?)\][ ]*\[([0-9]+)\]/g, '<a href="$2">$1</a>' ); data=data.replace(/\[(.*?\])[]*\[([0-9]+)\]/g'; 它工作得很好,但现在我想用一个RegExp对象来实现这一点。因此,我设置了以下代码:

我尝试用JavaScript编写一个简单的标记解析器。因此,我想检查
[link content][link id]
语法。我使用以下代码:

data = data.replace( /\[(.*?)\][ ]*\[([0-9]+)\]/g, '<a href="$2">$1</a>' );
data=data.replace(/\[(.*?\])[]*\[([0-9]+)\]/g';
它工作得很好,但现在我想用一个RegExp对象来实现这一点。因此,我设置了以下代码:

var r = new RegExp( '\[(.*?)\][ ]*\[([0-9]+)\]', 'g' );
data = data.replace( r, '<a href="$2">$1</a>' );
var r=newregexp('\[(.*?\][]*\[([0-9]+)\]','g');
数据=数据。替换(r');
但它不起作用。它甚至说我的正则表达式(因为第一个例子做得很好,所以可以工作)是无效的:

正则表达式中的(不匹配)

我认为这一定与我不知道的一些RegExp对象特性有关。
我做错了什么?如何解决问题?

因为RegExp构造函数的第一个参数是字符串,而不是模式文字,所以必须转义反斜杠,因为您希望在模式中使用文字反斜杠:

var r = new RegExp( '\\[(.*?)\\][ ]*\\[([0-9]+)\\]', 'g' );
var r=/\[(.*?\][]*\[([0-9]+)\]/g;
数据=数据。替换(r');

双转义反斜杠:

var r = new RegExp( '\\[(.*?)\\][ ]*\[([0-9]+)\\]', 'g' );

你需要加倍逃逸:

var r = new RegExp( '\\[(.*?)\\][ ]*\\[([0-9]+)\\]', 'g' )

除了图案的反斜杠问题外,还存在以下问题:

data = data.replace( r, '<a href="$2">$1</a>' );

您可能需要使用该方法的String.replace(r,func)变体,并在替换中包含验证以生成“func”。

另一方面,您可能会发现通过在线测试仪()运行JavaScript正则表达式很有用。谢谢,这似乎是一个很好的工具。我使用了这个()PHP-ish计算器。在JS中编写脚本时,JS ish可能更好:)
data.replace(/foo/g,'bar')
data.replace(new RegExp('/foo','g'),'bar')
是相同的东西。。没有考虑那些字符串问题。现在很明显。谢谢:-)
data = data.replace( r, '<a href="$2">$1</a>' );
[<script>stealCookies()</script>][http://oops.example.com/]
[hover me][http://hello" onmouseover="stealCookies()]
[click me][javascript:stealCookies()]