请教个正则问题,研究一天了没研究出来

"$islandPositions[D][0]"
"$boatPosition[single][A][2]"

想把这样的字符串转化成对象,最后返回一个这样的数组
['islandPositions', 'A, '0']
['boatPosition', 'single', 'A', '2']

希望能有人回答,在线等

阅读 3.3k
6 个回答

正则没啥思路,不过可以通过js把这个问题解决了。
.replace(/\]\[/g, '|').replace(']', '').replace('[','|').replace('$', '').split('|')

"$boatPositionsingle[2]".match(/[a-zA-Z0-9]+/g)

"$islandPositions[D][0]".replace(/\$/g,"").replace(/\W/g,',').replace(/,,/g,",").replace(/,$/g,"").split(",")
"$boatPosition[single][A][2]".replace(/\$/g,"").replace(/\W/g,',').replace(/,,/g,",").replace(/,$/g,"").split(",")

用正则可能还比较麻烦,以下是php的实现

  $str = '$boatPosition[single][A][2]';
  $bracketsUnit = '(\[(\w+)\])';
  $preg = '/\$([^\[]+)'. implode("", array_fill(0, substr_count($str, "["), $bracketsUnit)) .'/is';
  preg_match($preg, $str, $m);

1589278747(1).jpg

function parse(str) {
    return result = [
        str.match(/^\$(\w+[\w|\d]*)/)[1],
        ...(str.match(/\[([\w|\d]+)\]/g) || [])
            .map(item => item.match(/([\w|\d]+)/)[1])
    ];
}
console.log(parse('$islandPositions[D][0]'));
console.log(parse('$boatPosition[single][A][2]'));
推荐问题
宣传栏