RegEx 中的变量 - 将 RegEx 语法转换为字符串 - 如何避免?

Variable in RegEx - Turns RegEx Syntax to String - How to avoid?

在下面的代码片段(示例)中,您可以看到我试图构建一个函数,以便在我的项目中进行更舒适的字符串替换。

很快我发现有必要将 regex-syntax 与变量联系起来,并在 topic.

中找到了这个 regEx-Objekt 解决方案

但经过几个小时的尝试,我意识到我的这个解决方案并没有真正奏效,因为它将斜杠转换为字符串,最后我们又得到了一个简单的字符串。

下面的例子集中了一个URL来替换。我喜欢这个例子,因为我们在输出模式和输入中有斜杠:

function replaceThis(valInput, valPattern, valReplace) {

  var regex = new RegExp('/' + valPattern + '/', "g");
  return valInput.replace(regex, valReplace);
}

example_input = 'http://localhost/images/important.jpg';
example_target = '/Applications/AMPPS/www/';
example_pattern = 'http:\/\/localhost\/';

// With Function
$('#a').html('[RESULT 1] ' + replaceThis(example_input, example_pattern, example_target));

// With Strings (without Function)
$('#b').html('[RESULT 2] ' + 'http://localhost/images/important.jpg'.replace(/http:\/\/localhost\//g, '/Applications/AMPPS/www/'));
p {
  font-family: verdana;
  margin: 2p 5px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p id="a">a</p>
<p id="b">b</p>

您可以看到:

var regex = new RegExp('/' + valPattern + '/', "g");

应该查找如下字符串:

'/http://localhost//g'

不喜欢assumed/wished:

/http://localhost//g

应该查找如下字符串:

'http://localhost/'

关于如何 handle/solve 有什么想法吗? 我为此工作了几个小时。

你为什么需要正则表达式?为什么不像这样替换字符串?:

var input = 'http://localhost/images/important.jpg';
var pattern = 'http://localhost/';

var output = input.replace(pattern, '/Applications/AMPPS/www/');
console.log(output); // /Applications/AMPPS/www/images/important.jpg

当您使用 RegExp 对象表示法时,将第一个参数作为不带 / 的模式传递,将第二个参数作为标志传递。

并对其进行双重转义。

所以 /\w{0,9}/g 将是 new RegExp('\w{0,9}','g');

所以你的函数将是:

function replaceThis(valInput, valPattern, valReplace) {

  var regex = new RegExp(valPattern , "g");
  return valInput.replace(regex, valReplace);
}