正则表达式和获取字符串的部分

时间:2012-07-20 16:51:31

标签: regex

我有许多字符串,如

blip createBlip ( float x, float y, float z, [int icon=0, int size=2, int r=255, int g=0, int b=0, int a=255, int ordering=0, float visibleDistance=99999.0, visibleTo = getRootElement()] )

float float float getElementRotation ( element theElement [, string rotOrder = "default" ] )

我需要获取此字符串的部分,例如

array(
[1] = blip
[2] = createBlip
[3] = x
[4] = y
[5] = z
)

array(
[1] = blip createBlip
[2] = float x
[3] = float y
[4] = float z
[5] = int icon=0
[6] = int size=2
[7] = int r=255

...

是否可以使用正则表达式执行此操作?如果是,怎么样?

1 个答案:

答案 0 :(得分:1)

我认为你可以使用正则表达式组和javascript String.match()方法,例如(第一个字符串):

var string = "blip createBlip ( float x, float y, float z, [int icon=0, int size=2, int r=255, int g=0, int b=0, int a=255, int ordering=0, float visibleDistance=99999.0, visibleTo = getRootElement()] )";

var result = string.match(/((?:(?:\w+)\s?)+?)\(?\[?((?:(?:(?:(?:\s?\w+)+))\,)+)\s?\[((?:(?:(?:\s?=?\.?\(?\)?\w?)+)\,?)+)\]\s?\)/);

结果将是一个数组:

["blip createBlip ( float x, float y, float z, [int icon=0, int size=2, int r=255, int g=0, int b=0, int a=255, int ordering=0, float visibleDistance=99999.0, visibleTo = getRootElement()] )", "blip", "createBlip", " float x, float y, float z,", "int icon=0, int size=2, int r=255, int g=0, int b=0, int a=255, int ordering=0, float visibleDistance=99999.0, visibleTo = getRootElement()"]

现在,result [0]包含完全匹配,但result [1] .. result [n](n - 捕获组数)包含参数在()和[]括号内的字符串。现在你可以用“,”分割“float x,float y,float z”,只得到参数。

您应该尝试概括该模式,以便它匹配第二个字符串和您拥有的其他字符串。它看起来很疯狂,但现在只有解决方案出现在我脑海中......