在PHP中,我有这个问题(来自帐户上的先前问题):
$message = 'Testing this **quote**';
$search = '/\*\*(.*?)\\*\*/';
$replace = '<span style="font-weight: bold;">\\1</span>';
这很好。
在JavaScript中,我有这个:
var regexFind = document.getElementById("regexFind").innerHTML;
var pattern = /\*\*(.*?)\*\*/gi;
var match = regexFind.match(pattern);
var result = regexFind.split(pattern).join("<span style='font-weight: bold;'>**\\1**</span>");
document.getElementById("regexOutput").innerHTML=result;
但是正如您在
var result
中看到的那样,我使用\\1
,但输出为:**\1**test**\1***
代替了粗体测试,是否有与PHP的\\1
等效的JavaScript我的方法不正确吗?用更好(可行)的方法回答。如果可能的话。
EDITS / RESPONSES
当尝试按@nnnnnn建议使用
$1
方法时:var result = regexFind.split(pattern).join("<span style='color: red;'>**$1**</span>");
它输出:
**$1**test**$1**
最佳答案
使用.replace()
代替.match()
和.join()
,然后可以将第一个子匹配项称为$1
:
var result = regexFind.replace(/\*\*(.*?)\*\*/gi,
'<span style="font-weight: bold;">$1</span>');
(如果还有第二个子匹配项,则为
$2
,依此类推。)