formatAddress function

dynamic formatAddress(
  1. String address
)

Implementation

formatAddress(String address) {
  RegExp buildingNumberRegx = RegExp(r'\d+.*?\d+(?=号)'); // or (\d+-)?\d+(?=号)
  RegExp addressRegex = RegExp('[^\\x00-\\x7F]+');

  Iterable<Match> matches = buildingNumberRegx.allMatches(address);
  List<String> matchingStrings = [];
  List<String> nonMatchingStrings = [];

  for (Match match in matches) {
    String matchedPart = match.group(0)!;
    matchingStrings.add(matchedPart);
  }

  addressRegex.allMatches(address).forEach((match) {
    nonMatchingStrings.add(match.group(0)!);
  });

  if (matchingStrings.isNotEmpty) {
    return {
      "address": nonMatchingStrings.isNotEmpty ? nonMatchingStrings[0] : '',
      "building": matchingStrings.join(""),
    };
  } else {
    RegExp englishRegex = RegExp(r'[a-zA-Z0-9.-]+');
    RegExp japaneseRegex = RegExp('[^\\x00-\\x7F]+');

    List<String> englishStrings = [];
    List<String> japaneseStrings = [];

    englishRegex.allMatches(address).forEach((match) {
      englishStrings.add(match.group(0)!);
    });

    japaneseRegex.allMatches(address).forEach((match) {
      japaneseStrings.add(match.group(0)!);
    });

    return {
      "address": japaneseStrings.isNotEmpty ? japaneseStrings[0] : '',
      "building": englishStrings.join(""),
    };
  }
}