以下正则表达式正确地提取引号之间的路径。
const value = 'image-width("image-path.jpg")';
const result = value.match(/image-width\(['"]?(.+?)['"]?\)/)[1];
console.log(result); // image-path.jpg
但我需要让它更干,因为image-width
可能并不总是相同,所以我做了一个函数,使image-width
成为变量
function getPath(value, wrapper) {
const regexString = `${wrapper}\\(['"]?(.+?)['"]?\\)`; // deliberate double back slash
const patternMatch = new RegExp(regexString, 'g'); // /image-width\(['"]?(.+?)['"]?\)/g (which is the same as the working regex value above
return value.match(patternMatch)[1]; // undefined
}
const path = getPath('image-width("image-path.jpg")', 'image-width'); // undefined
这不起作用,path
只是未定义。
答案 0 :(得分:0)
问题在于match()
使用g
修饰符
.match()
function getPath(value, wrapper) {
const regexString = `${wrapper}\\(['"]?(.+?)['"]?\\)`;
const patternMatch = new RegExp(regexString, 'g');
return value.match(patternMatch)[1];
}
const path = getPath('image-width("image-path.jpg")', 'image-width'); // undefined
.exec()
function getPath(value, wrapper) {
const regexString = `${wrapper}\\(['"]?(.+?)['"]?\\)`;
const patternMatch = new RegExp(regexString, 'g');
return patternMatch.exec(value)[1]; // Use exec() instead
}
const path = getPath('image-width("image-path.jpg")', 'image-width'); // image-path.jpg