| Package: regexplain | Package: regexplain | ||||
| Title: Rstudio addin to help you with your regexes (in progress) | Title: Rstudio addin to help you with your regexes (in progress) | ||||
| Version: 0.0.1.9000 | |||||
| Version: 0.1.0 | |||||
| Date: 2018-03-07 | Date: 2018-03-07 | ||||
| Authors@R: c( | Authors@R: c( | ||||
| person("Garrick", "Aden-Buie", email = "g.adenbuie@gmail.com", role = c("aut", "cre")), | person("Garrick", "Aden-Buie", email = "g.adenbuie@gmail.com", role = c("aut", "cre")), |
| title: "regexplain" | title: "regexplain" | ||||
| output: github_document | output: github_document | ||||
| --- | --- | ||||
| [](commits/master) | |||||
|  | |||||
| [](http://www.repostatus.org/#active) | |||||
| [](https://cran.r-project.org/package=regexplain) | |||||
| [)`-yellowgreen.svg)](/commits/master) | |||||
| ```{r setup, include=FALSE} | ```{r setup, include=FALSE} | ||||
| knitr::opts_chunk$set(echo = TRUE) | knitr::opts_chunk$set(echo = TRUE) | ||||
| library(regexplain) | library(regexplain) | ||||
| ``` | ``` | ||||
| <!-- Links --> | <!-- Links --> | ||||
| [regexr]: https://regexr.com/ | [regexr]: https://regexr.com/ | ||||
| ## WORK IN PROGRESS!! | |||||
| regexplain is going to be an RStudio addin that helps you interactively build up your regex. | |||||
| regexplain is an RStudio addin that helps you interactively build up your regex expressions. | |||||
| Inspired by [RegExr][regexr] and `stringr::str_view`. | Inspired by [RegExr][regexr] and `stringr::str_view`. | ||||
| ## Done (ish) | |||||
| ## Installation | |||||
| Installation is easy with `devtools`: | |||||
| ```r | |||||
| devtools::install_github("gadenbuie/regexplain") | |||||
| ``` | |||||
| ## Status | |||||
| Mostly working, but there [may be issues or future changes](#issues). | |||||
| I would love your help testing this, feel free to send me your feedback on Twitter at [@grrrck](https://twitter.com/grrrck) or through the [issue tracker](https://github.com/gadenbuie/regexplain). | |||||
| ## RStudio Addin | |||||
|  | |||||
| The main feature of this package is the RStudio Addin **Regexplain Selection**. | |||||
| Just select the text or object containing text (such as the variable name of a vector or a data.frame column) and run **Regexplain Selection** from the RStudio Addins dropdown. | |||||
| <img src="docs/rstudio-addin-list.png" width = "250px;" alt="regexplain in the Rstudio Addins dropdown"> | |||||
| The addin will open an interface with 4 panes where you can | |||||
| You can use `view_regex()` for a `stringr::str_view()` replacement that includes groups. | |||||
| - edit the **text** you've imported | |||||
| - build up a **regex** expression and interactively see it applied to your text | |||||
| - test the **output** of common string matching functions from `base` and `stringr` | |||||
| - and refer to a **help**ful cheatsheet | |||||
|  | |||||
| When you're done, click on the **Send Regex to Console** to send your regex expression to... the console! | |||||
| ```r | |||||
| > regex <- "(is|were|was) ([[:alpha:]]+) ([[:alpha:]]+)" | |||||
| ``` | |||||
| ### Additional Addins | |||||
| There are two more addins. | |||||
| **Regexplain File** lets you import the text lines from a file containing the text you want to process with regular expressions. | |||||
| **Regexplain Cheatsheet** opens the help page in the Viewer pane without blocking your current R session. | |||||
| ## View regex results without the interactivity | |||||
| regexplain also provides the function `view_regex()` that you can use as a `stringr::str_view()` replacement. | |||||
| In addition to highlighting matched portions of the text, `view_regex()` also colorizes groups and attemps to colorize the regex expression itself as well. | |||||
| ```r | ```r | ||||
| text <- c("breakfast=eggs;lunch=pizza", | text <- c("breakfast=eggs;lunch=pizza", | ||||
|  |  | ||||
| ## Planned (ish) | |||||
| ## Known Issues and Future Work {#issues} | |||||
| Regular expressions are nothing if not a collection of corner cases. | |||||
| Trying to pass regular expressions through Shiny and HTML inputs is a bit of a labrynth. | |||||
| For now, assume any issues or oddities you experience with this addin are entirely my fault and have nothing to do with the fine packages this addin is built on. | |||||
| If you do find an issue, [please file an issue](https://github.com/gadenbuie/regexplain). | |||||
| #### Things I know are wonky | |||||
| - Things get weird when regular text is surrounded by capture groups, i.e. `"(\w+) not grouped (\w+)"`. | |||||
| - `view_regex()` colorizes non-capture groups. I forgot about them when building that feature, I'll get back to it. | |||||
| #### Notes | |||||
| 1. An Rstudio addin gadget that allows you to interactively enter the regex and see the results. | |||||
| Like the above example, where the regex field is a text input. | |||||
| - I've set up this app so that most escape sequences don't need to be escaped. | |||||
| For example, you can enter `\w`, whereas in R this would need to be stored as | |||||
| `"\\w"`. The regex returned by the gadget will include the double backslash. | |||||
| In these cases the text input is not escaped by Shiny. | |||||
| Unicode and hex escape characters also do not need to be escaped, thanks to | |||||
| `stringi::stri_unescape_unicode()`. Here, `"\u"` *is* escaped by Shiny so I | |||||
| had to make sure they are unescaped. The list of escaped characters that get | |||||
| unescaped is `"\\u|\\x|\\N|\\a|\\o"`, please let me know if you find any | |||||
| others that should be on this list. | |||||
| 2. Import data from your environment, like a character vector, file, or data.frame column when opening the gadget. | |||||
| #### Planned improvements | |||||
| 3. Help tab in the gadget, pulling from `?regex` but with some navigation. | |||||
| - I may add `stringi` functions to the list of available functions in the **Output** tab. | |||||
| 4. Tab to interactively explore output of varying regex-applying functions. In other words, see what `stringr::str_locate_all` or `stringr::str_match_all` or `grep` or `grepl` return when applying the regex to your text. | |||||
| - I would like to add the regex/function options for the functions in the **Output** tab, similar to the options present in the **Regex** tab. |
| regexplain | regexplain | ||||
| ================ | ================ | ||||
| <!-- Links --> | |||||
| [](commits/master) | |||||
|  | |||||
| [](http://www.repostatus.org/#active) | |||||
| [](https://cran.r-project.org/package=regexplain) | |||||
| [](/commits/master) | |||||
| ## WORK IN PROGRESS\!\! | |||||
| <!-- Links --> | |||||
| regexplain is going to be an RStudio addin that helps you interactively | |||||
| build up your regex. Inspired by [RegExr](https://regexr.com/) and | |||||
| regexplain is an RStudio addin that helps you interactively build up | |||||
| your regex expressions. Inspired by [RegExr](https://regexr.com/) and | |||||
| `stringr::str_view`. | `stringr::str_view`. | ||||
| ## Done (ish) | |||||
| ## Installation | |||||
| Installation is easy with `devtools`: | |||||
| ``` r | |||||
| devtools::install_github("gadenbuie/regexplain") | |||||
| ``` | |||||
| ## Status | |||||
| Mostly working, but there [may be issues or future changes](#issues). | |||||
| I would love your help testing this, feel free to send me your feedback | |||||
| on Twitter at [@grrrck](https://twitter.com/grrrck) or through the | |||||
| [issue tracker](https://github.com/gadenbuie/regexplain). | |||||
| ## RStudio Addin | |||||
|  | |||||
| The main feature of this package is the RStudio Addin **Regexplain | |||||
| Selection**. Just select the text or object containing text (such as the | |||||
| variable name of a vector or a data.frame column) and run **Regexplain | |||||
| Selection** from the RStudio Addins | |||||
| dropdown. | |||||
| <img src="docs/rstudio-addin-list.png" width = "250px;" alt="regexplain in the Rstudio Addins dropdown"> | |||||
| The addin will open an interface with 4 panes where you can | |||||
| You can use `view_regex()` for a `stringr::str_view()` replacement that | |||||
| includes groups. | |||||
| - edit the **text** you’ve imported | |||||
| - build up a **regex** expression and interactively see it applied to | |||||
| your text | |||||
| - test the **output** of common string matching functions from `base` | |||||
| and `stringr` | |||||
| - and refer to a **help**ful cheatsheet | |||||
|  | |||||
| When you’re done, click on the **Send Regex to Console** to send your | |||||
| regex expression to… the console\! | |||||
| ``` r | |||||
| > regex <- "(is|were|was) ([[:alpha:]]+) ([[:alpha:]]+)" | |||||
| ``` | |||||
| ### Additional Addins | |||||
| There are two more addins. **Regexplain File** lets you import the text | |||||
| lines from a file containing the text you want to process with regular | |||||
| expressions. **Regexplain Cheatsheet** opens the help page in the Viewer | |||||
| pane without blocking your current R session. | |||||
| ## View regex results without the interactivity | |||||
| regexplain also provides the function `view_regex()` that you can use as | |||||
| a `stringr::str_view()` replacement. In addition to highlighting matched | |||||
| portions of the text, `view_regex()` also colorizes groups and attemps | |||||
| to colorize the regex expression itself as well. | |||||
| ``` r | ``` r | ||||
| text <- c("breakfast=eggs;lunch=pizza", | text <- c("breakfast=eggs;lunch=pizza", | ||||
|  |  | ||||
| ## Planned (ish) | |||||
| ## Known Issues and Future Work | |||||
| Regular expressions are nothing if not a collection of corner cases. | |||||
| Trying to pass regular expressions through Shiny and HTML inputs is a | |||||
| bit of a labrynth. For now, assume any issues or oddities you experience | |||||
| with this addin are entirely my fault and have nothing to do with the | |||||
| fine packages this addin is built on. If you do find an issue, [please | |||||
| file an issue](https://github.com/gadenbuie/regexplain). | |||||
| #### Things I know are wonky | |||||
| - Things get weird when regular text is surrounded by capture groups, | |||||
| i.e. `"(\w+) not grouped (\w+)"`. | |||||
| - `view_regex()` colorizes non-capture groups. I forgot about them | |||||
| when building that feature, I’ll get back to it. | |||||
| #### Notes | |||||
| 1. An Rstudio addin gadget that allows you to interactively enter the | |||||
| regex and see the results. Like the above example, where the regex | |||||
| field is a text input. | |||||
| - I’ve set up this app so that most escape sequences don’t need to be | |||||
| escaped. For example, you can enter `\w`, whereas in R this would | |||||
| need to be stored as `"\\w"`. The regex returned by the gadget will | |||||
| include the double backslash. In these cases the text input is not | |||||
| escaped by Shiny. | |||||
| Unicode and hex escape characters also do not need to be escaped, | |||||
| thanks to `stringi::stri_unescape_unicode()`. Here, `"\u"` *is* | |||||
| escaped by Shiny so I had to make sure they are unescaped. The list | |||||
| of escaped characters that get unescaped is `"\\u|\\x|\\N|\\a|\\o"`, | |||||
| please let me know if you find any others that should be on this | |||||
| list. | |||||
| 2. Import data from your environment, like a character vector, file, or | |||||
| data.frame column when opening the gadget. | |||||
| #### Planned improvements | |||||
| 3. Help tab in the gadget, pulling from `?regex` but with some | |||||
| navigation. | |||||
| - I may add `stringi` functions to the list of available functions in | |||||
| the **Output** tab. | |||||
| 4. Tab to interactively explore output of varying regex-applying | |||||
| functions. In other words, see what `stringr::str_locate_all` or | |||||
| `stringr::str_match_all` or `grep` or `grepl` return when applying | |||||
| the regex to your text. | |||||
| - I would like to add the regex/function options for the functions in | |||||
| the **Output** tab, similar to the options present in the **Regex** | |||||
| tab. |
| .results { | .results { | ||||
| font-family: "Monaco", "Inconsolata", monospace; | font-family: "Monaco", "Inconsolata", monospace; | ||||
| color: #888888; | |||||
| } | } | ||||
| .gadget-result { | .gadget-result { | ||||
| .group { | .group { | ||||
| border-bottom: 2px solid; | border-bottom: 2px solid; | ||||
| color: black; | |||||
| padding: 0px; | padding: 0px; | ||||
| } | } | ||||