| 2123 | 2124 | </div> |
| 2124 | 2125 | <div> |
| 2125 | 2126 | <strong>Example:</strong> |
| 2126 | 2127 | <pre><code class="language-stscript">/let x Blue house and blue car || </code></pre> |
| 2127 | 2128 | <pre><code class="language-stscript">/replace pattern="blue" {{var::x}} | /echo |/# Blue house and car ||</code></pre> |
| 2128 | 2129 | <pre><code class="language-stscript">/replace pattern="blue" replacer="red" {{var::x}} | /echo |/# Blue house and red car ||</code></pre> |
| 2129 | 2130 | <pre><code class="language-stscript">/replace mode=regex pattern="/blue/i" replacer="red" {{var::x}} | /echo |/# red house and blue car ||</code></pre> |
| 2130 | 2131 | <pre><code class="language-stscript">/replace mode=regex pattern="/blue/gi" replacer="red" {{var::x}} | /echo |/# red house and red car ||</code></pre> |
| 2132 | + </div> |
| 2133 | + `, |
| 2134 | + })); |
| 2135 | + SlashCommandParser.addCommandObject(SlashCommand.fromProps({ |
| 2136 | + name: 'test', |
| 2137 | + callback: (({ pattern }, text) => { |
| 2138 | + if (!pattern) { |
| 2139 | + throw new Error('Argument of \'pattern=\' cannot be empty'); |
| 2140 | + } |
| 2141 | + const re = regexFromString(pattern.toString()); |
| 2142 | + if (!re) { |
| 2143 | + throw new Error('The value of \'pattern\' argument is not a valid regular expression.'); |
| 2144 | + } |
| 2145 | + return JSON.stringify(re.test(text.toString())); |
| 2146 | + }), |
| 2147 | + returns: 'true | false', |
| 2148 | + namedArgumentList: [ |
| 2149 | + new SlashCommandNamedArgument( |
| 2150 | + 'pattern', 'pattern to find', [ARGUMENT_TYPE.STRING], true, false, |
| 2151 | + ), |
| 2152 | + ], |
| 2153 | + unnamedArgumentList: [ |
| 2154 | + new SlashCommandArgument( |
| 2155 | + 'text to test', [ARGUMENT_TYPE.STRING], true, false, |
| 2156 | + ), |
| 2157 | + ], |
| 2158 | + helpString: ` |
| 2159 | + <div> |
| 2160 | + Tests text for a regular expression match. |
| 2161 | + </div> |
| 2162 | + <div> |
| 2163 | + Returns <code>true</code> if the match is found, <code>false</code> otherwise. |
| 2164 | + </div> |
| 2165 | + <div> |
| 2166 | + <strong>Example:</strong> |
| 2167 | + <pre><code class="language-stscript">/let x Blue house and green car ||</code></pre> |
| 2168 | + <pre><code class="language-stscript">/test pattern="green" {{var::x}} | /echo |/# true ||</code></pre> |
| 2169 | + <pre><code class="language-stscript">/test pattern="blue" {{var::x}} | /echo |/# false ||</code></pre> |
| 2170 | + <pre><code class="language-stscript">/test pattern="/blue/i" {{var::x}} | /echo |/# true ||</code></pre> |
| 2171 | + </div> |
| 2172 | + `, |
| 2173 | + })); |
| 2174 | + SlashCommandParser.addCommandObject(SlashCommand.fromProps({ |
| 2175 | + name: 'match', |
| 2176 | + callback: (({ pattern }, text) => { |
| 2177 | + if (!pattern) { |
| 2178 | + throw new Error('Argument of \'pattern=\' cannot be empty'); |
| 2179 | + } |
| 2180 | + const re = regexFromString(pattern.toString()); |
| 2181 | + if (!re) { |
| 2182 | + throw new Error('The value of \'pattern\' argument is not a valid regular expression.'); |
| 2183 | + } |
| 2184 | + if (re.flags.includes('g')) { |
| 2185 | + return JSON.stringify([...text.toString().matchAll(re)]); |
| 2186 | + } else { |
| 2187 | + const match = text.toString().match(re); |
| 2188 | + return match ? JSON.stringify(match) : ''; |
| 2189 | + } |
| 2190 | + }), |
| 2191 | + returns: 'group array for each match', |
| 2192 | + namedArgumentList: [ |
| 2193 | + new SlashCommandNamedArgument( |
| 2194 | + 'pattern', 'pattern to find', [ARGUMENT_TYPE.STRING], true, false, |
| 2195 | + ), |
| 2196 | + ], |
| 2197 | + unnamedArgumentList: [ |
| 2198 | + new SlashCommandArgument( |
| 2199 | + 'text to match against', [ARGUMENT_TYPE.STRING], true, false, |
| 2200 | + ), |
| 2201 | + ], |
| 2202 | + helpString: ` |
| 2203 | + <div> |
| 2204 | + Retrieves regular expression matches in the given text |
| 2205 | + </div> |
| 2206 | + <div> |
| 2207 | + Returns an array of groups (with the first group being the full match). If the regex contains the global flag (i.e. <code>/g</code>), |
| 2208 | + multiple nested arrays are returned for each match. If the regex is global, returns <code>[]</code> if no matches are found, |
| 2209 | + otherwise it returns an empty string. |
| 2210 | + </div> |
| 2211 | + <div> |
| 2212 | + <strong>Example:</strong> |
| 2213 | + <pre><code class="language-stscript">/let x color_green green lamp color_blue ||</code></pre> |
| 2214 | + <pre><code class="language-stscript">/match pattern="green" {{var::x}} | /echo |/# [ "green" ] ||</code></pre> |
| 2215 | + <pre><code class="language-stscript">/match pattern="color_(\\w+)" {{var::x}} | /echo |/# [ "color_green", "green" ] ||</code></pre> |
| 2216 | + <pre><code class="language-stscript">/match pattern="/color_(\\w+)/g" {{var::x}} | /echo |/# [ [ "color_green", "green" ], [ "color_blue", "blue" ] ] ||</code></pre> |
| 2217 | + <pre><code class="language-stscript">/match pattern="orange" {{var::x}} | /echo |/# ||</code></pre> |
| 2218 | + <pre><code class="language-stscript">/match pattern="/orange/g" {{var::x}} | /echo |/# [] ||</code></pre> |
| 2131 | 2219 | </div> |
| 2132 | 2220 | `, |
| 2133 | 2221 | })); |