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

"$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]'));
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏