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);
}
在下面的代码片段(示例)中,您可以看到我试图构建一个函数,以便在我的项目中进行更舒适的字符串替换。
很快我发现有必要将 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);
}