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



在下面的Snippet(示例)中,您可以看到我试图在项目中构建一个函数来更方便地替换字符串。

很快,我发现有必要将regex语法与变量连接起来,并在本主题中找到了regExObjekt解决方案。

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

以下示例重点介绍了要替换的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'

不喜欢假设/希望:

/http://localhost//g

应该查找字符串,如:

'http://localhost/'

有什么想法可以处理/解决这个问题吗?我从几个小时开始就在做这件事。

当您使用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);
}

为什么需要regex?为什么不这样替换字符串呢?:

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