diff --git a/.eslintrc.yaml b/.eslintrc.yaml
index 1e660b8de77056..95ff2ba3c0c77e 100644
--- a/.eslintrc.yaml
+++ b/.eslintrc.yaml
@@ -117,6 +117,12 @@ rules:
   no-mixed-spaces-and-tabs: 2
   no-multiple-empty-lines: [2, {max: 2, maxEOF: 0, maxBOF: 0}]
   no-restricted-syntax: [2, {
+    selector: "CallExpression[callee.object.name='assert'][callee.property.name='throws'][arguments.1.type='Literal']:not([arguments.1.regex])",
+    message: "use a regular expression for second argument of assert.throws()"
+  }, {
+    selector: "CallExpression[callee.object.name='assert'][callee.property.name='throws'][arguments.length<2]",
+    message: "assert.throws() must be invoked with at least two arguments."
+  }, {
     selector: "CallExpression[callee.name='setTimeout'][arguments.length<2]",
     message: "setTimeout() must be invoked with at least two arguments."
   }, {
@@ -161,7 +167,6 @@ rules:
   template-curly-spacing: 2
 
   # Custom rules in tools/eslint-rules
-  assert-throws-arguments: [2, { requireTwo: true }]
 
 # Global scoped method and vars
 globals:
diff --git a/doc/api/assert.md b/doc/api/assert.md
index 0b7621520b688f..2adc5549efb959 100644
--- a/doc/api/assert.md
+++ b/doc/api/assert.md
@@ -478,7 +478,7 @@ Note that `error` can not be a string. If a string is provided as the second
 argument, then `error` is assumed to be omitted and the string will be used for
 `message` instead. This can lead to easy-to-miss mistakes:
 
-<!-- eslint-disable assert-throws-arguments -->
+<!-- eslint-disable no-restricted-syntax -->
 ```js
 // THIS IS A MISTAKE! DO NOT DO THIS!
 assert.throws(myFunction, 'missing foo', 'did not throw with expected message');
diff --git a/test/parallel/test-assert.js b/test/parallel/test-assert.js
index 3579c10f159ad5..aa51eb7e523e2e 100644
--- a/test/parallel/test-assert.js
+++ b/test/parallel/test-assert.js
@@ -345,11 +345,11 @@ function thrower(errorConstructor) {
 assert.throws(makeBlock(thrower, a.AssertionError),
               a.AssertionError, 'message');
 assert.throws(makeBlock(thrower, a.AssertionError), a.AssertionError);
-// eslint-disable-next-line assert-throws-arguments
+// eslint-disable-next-line no-restricted-syntax
 assert.throws(makeBlock(thrower, a.AssertionError));
 
 // if not passing an error, catch all.
-// eslint-disable-next-line assert-throws-arguments
+// eslint-disable-next-line no-restricted-syntax
 assert.throws(makeBlock(thrower, TypeError));
 
 // when passing a type, only catch errors of the appropriate type
@@ -524,7 +524,7 @@ testAssertionMessage({a: NaN, b: Infinity, c: -Infinity},
 
 // #2893
 try {
-  // eslint-disable-next-line assert-throws-arguments
+  // eslint-disable-next-line no-restricted-syntax
   assert.throws(function() {
     assert.ifError(null);
   });
diff --git a/tools/eslint-rules/assert-throws-arguments.js b/tools/eslint-rules/assert-throws-arguments.js
deleted file mode 100644
index 3b51188c0c89bc..00000000000000
--- a/tools/eslint-rules/assert-throws-arguments.js
+++ /dev/null
@@ -1,60 +0,0 @@
-/**
- * @fileoverview Check that assert.throws is never called with a string as
- * second argument.
- * @author Michaƫl Zasso
- */
-'use strict';
-
-//------------------------------------------------------------------------------
-// Rule Definition
-//------------------------------------------------------------------------------
-
-function checkThrowsArguments(context, node) {
-  if (node.callee.type === 'MemberExpression' &&
-      node.callee.object.name === 'assert' &&
-      node.callee.property.name === 'throws') {
-    const args = node.arguments;
-    if (args.length > 3) {
-      context.report({
-        message: 'Too many arguments',
-        node: node
-      });
-    } else if (args.length > 1) {
-      const error = args[1];
-      if (error.type === 'Literal' && typeof error.value === 'string' ||
-          error.type === 'TemplateLiteral') {
-        context.report({
-          message: 'Unexpected string as second argument',
-          node: error
-        });
-      }
-    } else {
-      if (context.options[0].requireTwo) {
-        context.report({
-          message: 'Expected at least two arguments',
-          node: node
-        });
-      }
-    }
-  }
-}
-
-module.exports = {
-  meta: {
-    schema: [
-      {
-        type: 'object',
-        properties: {
-          requireTwo: {
-            type: 'boolean'
-          }
-        }
-      }
-    ]
-  },
-  create: function(context) {
-    return {
-      CallExpression: (node) => checkThrowsArguments(context, node)
-    };
-  }
-};