如何使用RegExp将动态创建的模式用作替换中的字符串?

时间:2017-03-23 11:09:58

标签: javascript regex replace

我有一个模式,它是根据数组动态创建的字符串。我相信我需要使用一个RegExp对象来实现这一点,但它也不会。控制台日志中没有错误,因此对象的使用是正确的。

var pattern = "(?:\\()(iZeroPosSensor|iZeroPosSensorConnected)(?:\\))"   // does not work
//var pattern = /(?:\()(iZeroPosSensor|iZeroPosSensorConnected)(?:\))/ // works
var subst = "(<span class='observer'>$1</span>)"
var regex = new RegExp(pattern, 'g');

我记得在进行搜索时使用带有字符串的RegExp,这很有效。

编辑添加了额外的反斜杠,但仍无效。

3 个答案:

答案 0 :(得分:0)

使用$1插入匹配项而不是$&

尝试使用代码段

&#13;
&#13;
var pattern = "(?:\()(iZeroPosSensor|iZeroPosSensorConnected)(?:\))" 
var subst = "(<span class='observer'>$&</span>)"
var regex = new RegExp(pattern, 'g');

var text="SOMETHINGiZeroPosSensorTest";
console.log(text.replace(regex,subst));
&#13;
&#13;
&#13;

答案 1 :(得分:0)

您可以使用String.prototype.replace()第一个参数regex,第二个参数使用函数来格式化字符串结果:

var pattern = /iZeroPosSensor(?:Connected)?/,
    regex = new RegExp(pattern, 'g'),
    text ='Some demo string with iZeroPosSensor and iZeroPosSensorConnected for testing...',
    result = text.replace(regex, str => `(<span class="observer">${str}</span>)`);

console.log(result);

答案 2 :(得分:0)

也许你需要这个?

&#13;
&#13;
var pattern = '(?:\\()(iZeroPosSensor(?:Connected)?)(?:\\))',
    regex = new RegExp( pattern, 'g' ),
    subst = "(<span class='observer'>$1</span>)",
    result = "(iZeroPosSensorConnected)".replace( regex, subst );

console.log(result);
&#13;
&#13;
&#13;