Javascript正则表达式占位符打印字符串而不是其值

时间:2015-04-03 21:11:33

标签: javascript regex

我有一个javascript函数,它查找某种格式的字符串,然后将其转换为链接

<script>
var re = /Ticket-([0-9]*?(?=-)-[0-9]*)/; 
var str = 'ASD Ticket-492-367 - Make my day.'; 
t = str.replace(re,'<a href="http://myworld/ticket/$1">$0</a>')
document.write(t);
</script>

它查找Ticket- [某些数字] - [somenumbers]并将其转换为链接。现在,当我在JS编辑器中单独运行它时,它可以工作。但是当我在我的脚本中运行它并在页面上运行时,它确实将字符串转换为列表,但在页面上打印出字面值$ 0而不是其值。我的Javascript是正确的还是我的脚本中的其他内容,可能是为了设置错误的relsuts。一如往常,任何帮助表示赞赏。

3 个答案:

答案 0 :(得分:4)

Javascript使用$&作为整个匹配的占位符,而不是$0 $number仅用作括号中捕获组的占位符。见MDN

var re = /Ticket-([0-9]*?(?=-)-[0-9]*)/; 
var str = 'ASD Ticket-492-367 - Make my day.'; 
t = str.replace(re,'<a href="http://myworld/ticket/$1">$&</a>')
document.getElementById('result').innerHTML = t;
<div id="result"></div>

答案 1 :(得分:1)

如果您要匹配列表,则应使用/ g使正则表达式全局化。 0美元并没有获得匹配的价值,$&amp;确实

这是一个小提琴:http://jsfiddle.net/2p91co2g/

编辑:显然jsfiddle已经失败了。我使用的HTML是:

<!DOCTYPE html>
<html>
<body>
Ticket-445-1235 - Make my day<br>
Ticket-445-1255 - Make his day<br>
Ticket-443-4356 - He's feeling lucky<br>
Ticket-443-5555 - punk<br>
</body>
</html>

调整的javascript是:

window.onload = function() {
var re = /Ticket-([0-9]*?(?=-)-[0-9]*)/g; 
var str = document.body.innerHTML; 
t = str.replace(re,'<a href="http://myworld/ticket/$1">$&</a>')
document.write(t);
}

答案 2 :(得分:-1)

尝试两次逃避美元......

\\$