const str = "apple orange banana apple";

/* 文字列から
   最初に一致するパターンのみを検索し、配列として返します。
   (出力される配列の最初の要素は一致したパターンの文字列であり、
   その次の要素には index、input、groups プロパティが含まれます。) */
const pattern = /apple/;
const result = str.match(pattern);

console.log(result); // 出力: ["apple", index: 0, input: "apple orange banana apple", groups: undefined]
console.log(result.length); // 出力: 1
console.log(result[0]); // 出力: "apple"

/* もし、テキスト全体からすべての一致するパターンの文字列を検索したい場合は、
   正規表現に g(グローバル検索)フラグを追加します。
   g フラグがない時に配列の要素として出力されていた index、input、groups プロパティは含まれず、
   すべての一致するパターンの文字列がそれぞれ配列の要素として返されます。 */
const globalPattern = /apple/g;
const globalResult = str.match(globalPattern);

console.log(globalResult); // 出力: ["apple", "apple"]
console.log(globalResult.length); // 出力: 2
console.log(globalResult[0]); // 出力: "apple"
console.log(globalResult[1]); // 出力: "apple"

/* 特定のパターンの文字列を検査する
   メールアドレスのパターンを検索 */
const userInfo = "私のメールアドレスは user@example.com です。";
const searchEmailPattern = /\w+@\w+\.\w+/g;
const searchEmailResult = userInfo.match(searchEmailPattern);

console.log(searchEmailResult); // 出力: ["user@example.com"]
console.log(searchEmailResult.length); // 出力: 1
console.log(searchEmailResult[0]); // 出力: "user@example.com"
str.match(regexp);
const str = "apple orange banana apple";
const pattern = /apple/; // g フラグなし
const result = str.match(pattern);

console.log(result);
// 出力: ["apple", index: 0, input: "apple orange banana apple", groups: undefined]

console.log(result.length); // 出力: 1
const str = "apple orange banana apple";
const globalPattern = /apple/g; // g フラグあり
const globalResult = str.match(globalPattern);

console.log(globalResult); // 出力: ["apple", "apple"]
console.log(globalResult.length); // 出力: 2
const str = "Hello, World!";
const result = str.match();

console.log(result); // 出力: ["", index: 0, input: 'Hello, World!', groups: undefined]
console.log(result.length); // 出力: 1
const str = "Hello, World!";
const result = str.match("");

console.log(result); // 出力: ["", index: 0, input: 'Hello, World!', groups: undefined]
console.log(result.length); // 出力: 1
const str = "Hello, World!";
const result = str.match(" ");

console.log(result); // 出力: [" ", index: 6, input: 'Hello, World!', groups: undefined]
console.log(result.length); // 出力: 1
const str = "apple orange banana apple";
const pattern = /apple/;

const result = str.match(pattern);
console.log(result); // 出力: ["apple", index: 0, input: 'apple orange banana apple', groups: undefined]
console.log(result.length); // 出力: 1
const str = "apple orange banana apple";
const pattern = /apple/g; // <= g (グローバル検索) フラグを追加
const result = str.match(pattern);

console.log(result); // 出力: ["apple", "apple"]
console.log(result[0]);
console.log(result[1]);
console.log(result.length); // 出力: 2
const str = "Apple orange banana Apple";

// g フラグなし / i フラグあり
const pattern1 = /apple/i;
const result1 = str.match(pattern1);
console.log(result1); // 出力: ["Apple", index: 0, input: 'Apple orange banana Apple', groups: undefined]

// g フラグあり / i フラグあり
const pattern2 = /apple/gi; // /apple/ig と正確に同一(フラグの順序は自由)
const result2 = str.match(pattern2);
console.log(result2); // 出力: ["Apple", "Apple"]
const str = "Hi, World!";
const pattern = /Hello/;
const result = str.match(pattern);

console.log(result); // 出力: null
const text = "お問い合わせは help@example.com または support@example.org までご連絡ください。";

const emailPattern = /\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b/g;
const emailMatches = text.match(emailPattern);

console.log(emailMatches);
// 出力: ["help@example.com", "support@example.org"]
const text = "詳細は https://www.example.com でご確認ください。";

const urlPattern = /\b(?:https?:\/\/)?(?:www\.)?[a-zA-Z0-9-]+(?:\.[a-z]{2,})+(?:\/[^\s]*)?\b/g;
const urlMatches = text.match(urlPattern);

console.log(urlMatches);
// 出力: ["https://www.example.com"]
const html = '<div class="container"><p>Hello, <b>world!</b></p></div>';
const tagPattern = /<[^>]+>/g;
const tags = html.match(tagPattern);

console.log(tags);
// 出力: ["<div class="container">", "<p>", "<b>", "</b>", "</p>", "</div>"]
const css = '.header { color: #333; } .main-content { font-size: 16px; }';
const classPattern = /\.([a-zA-Z-_\d]+)/g;
const classes = css.match(classPattern);

console.log(classes);
// 出力: [".header", ".main-content"]