我还在与regexp挣扎,想知道这是否可能。
我需要解析表达式中的变量名,但是我需要在#34; dot"之后跳过字符串文字中的变量名。
所以表达如下:
'test' + (n + text.length)
我只想获得n
和text
。
我正在使用/([a-z_][a-z0-9_]*)/gi
但它给了我test,n,text,length
感谢您的帮助:)
答案 0 :(得分:0)
如果输入不太复杂,可以使用正则表达式:
var re = /'[^'\\]*(?:\\.[^'\\]*)*'|"[^"\\]*(?:\\.[^"\\]*)*"|(?:^|[^.])\b(\w+)/g;
var str = '\'test\\\' this\' + "Missing \\\"here\\\"" + (n + text.length)';
document.body.innerHTML = "Testing string: <b>" + str + "</b><br/>";
var res = [];
while ((m = re.exec(str)) !== null) {
if (m[1]) { res.push(m[1]); }
}
document.body.innerHTML += JSON.stringify(res, 0, 4);
正则表达式详情:
'[^'\\]*(?:\\.[^'\\]*)*'
- 单引号字符串文字(支持转义序列)|
- 或"[^"\\]*(?:\\.[^"\\]*)*"
- 双引号字符串文字(支持转义序列)|
- 或(?:^|[^.])\b(\w+)
- 1个单词字符,位于字符串开头或非点后面,并以字边界开头(放在第1组内)请参阅regex demo。