正则表达式模式与变量不工作

时间:2018-02-19 10:49:22

标签: javascript regex concatenation

以下正则表达式正确地提取引号之间的路径。

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只是未定义。

1 个答案:

答案 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