使用正则表达式在JavaScript中拆分字符串

时间:2011-01-28 20:33:57

标签: javascript regex

我正在尝试编写一个在javascript中使用的正则表达式。

var script = "function onclick() {loadArea('areaog_og_group_og_consumedservice', '\x26roleOrd\x3d1');}";
var match = new RegExp("'[^']*(\\.[^']*)*'").exec(script);

我想拆分包含两个元素:

match[0] == "'areaog_og_group_og_consumedservice'";

match[1] == "'\x26roleOrd\x3d1'";

在gskinner.com/RegExr/上测试时,此正则表达式匹配正确,但它在我的Javascript中不起作用。可以通过在此处http://www.regextester.com/测试ir来复制此问题。

我需要使用Internet Explorer 6及更高版本的解决方案。

任何正则表达式大师的帮助吗?

3 个答案:

答案 0 :(得分:1)

根据您的正则表达式判断,您似乎正在尝试匹配可能包含转义引号的单引号字符串。正则表达式的正确形式是:

'[^'\\]*(?:\\.[^'\\]*)*'

(如果您需要允许转义引号,则只需/'[^']*'/。)如果您愿意,还必须设置g标记得到两个字符串。这是正则表达式 - 文字形式的正则表达式:

/'[^'\\]*(?:\\.[^'\\]*)*'/g

如果使用RegExp构造函数而不是正则表达式文字,则必须双重转义反斜杠:一次用于字符串文字,一次用于正则表达式。您还必须将标记(gim)作为单独的参数传递:

var rgx = new RegExp("'[^'\\\\]*(?:\\\\.[^'\\\\]*)*'", "g");
while (result = rgx.exec(script))
    print(result[0]);

答案 1 :(得分:0)

也许这个:

'([^']*)'\s*,\s*'([^']*)'

答案 2 :(得分:0)

您正在寻找的正则表达式是.*?('[^']*')\s*,\s*('[^']*')。这里的问题是,像往常一样,match[0]是整个匹配的文本(这是非常正常的),因此对您来说并不是特别有用。 match[1]match[2]是您要查找的两个匹配项。

var script = "function onclick() {loadArea('areaog_og_group_og_consumedservice', '\x26roleOrd\x3d1');}";
var parameters = /.*?('[^']*')\s*,\s*('[^']*')/.exec(script);
alert("you've done: loadArea("+parameters[1]+", "+parameters[2]+");");

我唯一的问题是它有点不灵活。您可能希望花一点时间将函数调用与2或3个参数匹配?

修改 为了回应您的要求,这里是匹配1,2,3,...,n参数的正则表达式。如果您注意到,我使用了非捕获组((?: )部分)来查找逗号的许多实例,后跟第二个参数。

/.*?('[^']*')(?:\s*,\s*('[^']*'))*/