Plugins for Draft.js and React to improve TextEditor capabilities
Switch branches/tags
Nothing to show

Draft Regex

Greenkeeper badge

These plugins are written for Draft.js and React to improve TextEditor capabilities.

To use static typing, make sure that you have installed Flow.

Getting started

npm install draft-regex


yarn add draft-regex

How to use

import * as React from "react";
import { EditorState, Editor } from "draft-js";
import {
} from "draft-regex";

type State = {
  editorState: EditorState

class MyEditor extends React.Component<void, State> {
  state: State = {
    editorState: EditorState.createEmpty()

  onChange = (editorState: EditorState) => {
    this.setState({ editorState: clearEmptyBlocks(editorState) });

  handlePastedText = (
    text: ?string,
    html: ?string,
    editorState: EditorState
  ) => {
    this.setState({ editorState: clearPastedStyle(editorState) });

  onSave = () => {
    const { editorState } = this.state;
    this.setState({ editorState: replaceTextRegex(editorState) });

  render() {
    const { editorState } = this.state;
    return (
        <button onClick={this.onSave}>Save</button>


All plugin as an argument are taken by EditorState and options and returned EditorState.


Prevents the ability to add blank lines more than 3 (varies in settings).

A second argument can take a number for remove blank lines (number + 1).

function clearEmptyBlocks(editorState: EditorState, maxEmptyLines?: number = 2): EditorState


Apply regular expressions to the entire text, in the process of typing or after copy/pasting text.

A second argument can take an array of rules. typoRules is a set of basic rules that you can not use.

A third argument can take an object that can contain options, which you can expand to use the plugin is very flexible.

extraSpaces are simple regular expressions that forbid doing more than one space in a row.

{ extraSpaces: true }

All regular expressions are used once in the entire text. If you use a lot of regular expressions, the performance of the editor can drop noticeably.

function replaceTextRegex(
  editorState: EditorState,
  rulesArray?: Array<Rule> = typoRules,
  options?: Options
): EditorState

The rule looks like this: { reg: new RegExp(), shift: '' }


Clears styles of copy/pasted text to those that you have.

A second argument can take an object that can contain options.

blockTypes is an array of strings that contains all the types of blocks that you use in your editor. This is useful if you want to clear all styles, except those you can already ask yourself.

A list of all types can be found here.

If you do not want to use all six kinds of headings, you can bring the headers to the same view using shiftHeader.

The same applies to lists.

function clearPastedStyle(
  editorState: EditorState,
  options?: {
    blockTypes?: Array<string>,
    shiftHeader?: string,
    shiftList?: string,
): EditorState


To improve performance, use clearPastedStyle to handlePastedText method, and replaceTextRegex to save the text editor.