在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,依此类推。)

08-26 16:24
查看更多