Поиск подстроки и скобочных групп

173
15 марта 2018, 11:28

Я пытаюсь найти целую строку и все скобочные группы. Я хочу сделать это в строке:

contract var str = "contract CryptoGO is StandardToken, Babaika, Pisos, Banana { string public name; uint8 public decimals; string public symbol; string public version = 'H1.0'; uint256 public unitsOneEthCanBuy; uint256 public totalEthInWei; address public fundsWallet; function CryptoGOToken() { balances[msg.sender] = 1000000000000000000000000000; totalSupply = 1000000000000000000000000000; name = \"CryptoGO\"; decimals = 18; symbol = \"CGO\"; unitsOneEthCanBuy = 10000; fundsWallet = msg.sender; } function() payable{ totalEthInWei = totalEthInWei + msg.value; uint256 amount = msg.value * unitsOneEthCanBuy; if (balances[fundsWallet] < amount) { return; } balances[fundsWallet] = balances[fundsWallet] - amount; balances[msg.sender] = balances[msg.sender] + amount; Transfer(fundsWallet, msg.sender, amount); fundsWallet.transfer(msg.value); } function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); if(!_spender.call(bytes4(bytes32(sha3(\"receiveApproval(address,uint256,address,bytes)\"))), msg.sender, _value, this, _extraData)) { throw; } return true; }}";

Пример моего кода:

var str = "contract CryptoGO is StandardToken, Babaika, Pisos, Banana {   string public name;    uint8 public decimals;    string public symbol;    string public version = 'H1.0';    uint256 public unitsOneEthCanBuy;    uint256 public totalEthInWei;    address public fundsWallet;    function CryptoGOToken() {        balances[msg.sender] = 1000000000000000000000000000;        totalSupply = 1000000000000000000000000000;       name = \"CryptoGO\";        decimals = 18;        symbol = \"CGO\";        unitsOneEthCanBuy = 10000;        fundsWallet = msg.sender;    }    function() payable{        totalEthInWei = totalEthInWei + msg.value;        uint256 amount = msg.value * unitsOneEthCanBuy;        if (balances[fundsWallet] < amount) {            return;        }        balances[fundsWallet] = balances[fundsWallet] - amount;        balances[msg.sender] = balances[msg.sender] + amount;        Transfer(fundsWallet, msg.sender, amount);        fundsWallet.transfer(msg.value);   }    function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) {        allowed[msg.sender][_spender] = _value;        Approval(msg.sender, _spender, _value);        if(!_spender.call(bytes4(bytes32(sha3(\"receiveApproval(address,uint256,address,bytes)\"))), msg.sender, _value, this, _extraData)) { throw; }        return true;    }}"; 
            var re = /[^(//)]?\s?contract\s+([a-zA-Z0-9_\-]+)\s*is?\s+([a-zA-Z0-9_\-]+)\s*[, {]/ig; 
            var res 
            while ((res = re.exec(str)) != null) { 
                   console.log(res); 
            }

Сейчас я имею вывод:

[
  "contract CryptoGO is StandardToken,",
  "CryptoGO",
  "StandardToken"
]

А хочу получить следующий вывод:

[contract CryptoGO is StandardToken, Babaika, Banana {,
CryptoGO,
StandardToken,
Babaika,
Banana]

Как правильно переписать регулярное выражение, чтобы оно давало ожидаемый вывод?

READ ALSO
Не выполняется третье условие else if

Не выполняется третье условие else if

Не выполняется третье условие else ifПервые два работают корректно

160
ReactJS, создать новый элемент на странице

ReactJS, создать новый элемент на странице

Как при нажатии на кнопку (страницу уже зарендерина) создать элемент?

142
Как выделить значение в массиве

Как выделить значение в массиве

Есть вот такой массив:

147