用于匹配单词的正则表达式

时间:2012-04-10 05:38:45

标签: javascript regex

我想在javascript中获取定义字符串的变量名称 为此,我写了一个正则表达式

var x = "sdfsfsdf";

((\w.*?)(\s*=\s*)(['"]*)(.+?)(['"]*)\1)

此表达式的问题是当我使用RegExp.$2时,我应该将变量名称设为x,因为我们考虑上面的代码。它适用于某些表达式,但如果有像

这样的代码
function(a) {var b = document.createElement("script");}

然后结果为function(a){var b

请帮我改变我的正则表达式,以便在两种情况下都有效。

注意:javascript变量也可以在没有varx = "sdfsfsf";

的情况下声明

3 个答案:

答案 0 :(得分:0)

如果你的字符串不会太疯狂,你可以试试这个:

/[a-z_$][a-z0-9$_]*\s*=\s*.*?(;|$)/gi

试验:

> var r = /[a-z_$][a-z0-9$_]*\s*=\s*.*?(;|$)/gi;
  undefined
> 'var x = "sdfsfsdf";'.match(r);
  ["x = "sdfsfsdf";"]
> 'function(a) {var b = document.createElement("script");}'.match(r);
  ["b = document.createElement("script");"]

答案 1 :(得分:0)

/(^|;|{)\s*(var\s+)?(\S+)\s*=\s*['"][^'"]*['"]\s*(}|;|$)/i

(^|;|{)          at the beginning, after a semicolon or the bracket
\s*              0-n whitespace characters
(var\s+)?        could be followed by "var" with at least one whitespace
(\S+)            at least one none whitespace character
\s*=\s*          equal sign with possibly surrounded whitespaces
['"][^'"]*['"]   a 'string'
\s*(}|;|$)       have to end with the bracket or a semicolon or the end of the variable has been reached

另见this example

答案 2 :(得分:-1)

试试这个正则表达式:([^\w]?(\w.*?)(\s*=\s*)(['"]*)(.+?)(['"]*)\1)