Home > Enterprise >  Trying to RegExp an array, getting an Uncaught TypeError: x is not a function
Trying to RegExp an array, getting an Uncaught TypeError: x is not a function

Time:01-10

I am trying to get the file names from an array of S3 presigned URLs. The code looks like this:

const input_uri = ["https://s3.us-west-2.amazonaws.com/link.link2.website.com/link-file/item-file/item_id=168cc901-41fe-4994-a5dd-fbcc7bf1d649/date=2021-10-01/item-file-test (2).xlsx?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIATIQ7FVSIUGCQZL7N/20220106/us-west-2/s3/aws4_request&X-Amz-Date=20220106T072037Z&X-Amz-Expires=14400&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEJj//////////wEaCXVzLXdlc3QtMiJHMEUCIQD8zcE7Dk0NBD2F/r9hyTzZop0+eJ+nQAthpBO3OaGR7AIgI03YGJOTcNzQ79JjZYQvI4HD4A8hKNC5Edq/SXiMZTEqugIIoP//////////ARADGgwyMjQ0NNpe7sy2dtEb+toeBydBYt+5PfH6o1ISCeGe6WfuUaFQZEM0Yl2AUGhGb06S8dTDEsNqOBjqaAadtJx31fGUhIHkaE21M+JffVKmz9XXYeGx2MmpllUzCUbD7vEBM+KxJs5XQ+iZs5sslLFdfjMaWbrFYgUmMLX6fz4HXABR6zFIBH/iIvtijgX4dkXHUWssRHZD96Qo2ATHWVhM/xW4ut1LkLJt1c9U44L9eofZ2Zwp5vLyEIem6c2Nmwx0eo4uc2G+k5CTMF8WfWYRMYPHpksM=&X-Amz-SignedHeaders=host&response-content-disposition=&X-Amz-Signature=2395e814f4d8daa5ae86f9b40b76c16f042757008c595fc1c","https://s3.us-west-2.amazonaws.com/link.link2.website.com/link-file/item-file/item_id=168cc901-41fe-4994-a5dd-fbcc7bf1d649/date=2021-10-01/item-file-test (2).xlsx?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIATIQ7FVSIUGCQZL7N/20220106/us-west-2/s3/aws4_request&X-Amz-Date=20220106T072037Z&X-Amz-Expires=14400&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEJj//////////wEaCXVzLXdlc3QtMiJHMEUCIQD8zcE7Dk0NBD2F/r9hyTzZop0+eJ+nQAthpBO3OaGR7AIgI03YGJOTcNzQ79JjZYQvI4HD4A8hKNC5Edq/SXiMZTEqugIIoP//////////ARADGgwyMjQ0NNpe7sy2dtEb+toeBydBYt+5PfH6o1ISCeGe6WfuUaFQZEM0Yl2AUGhGb06S8dTDEsNqOBjqaAadtJx31fGUhIHkaE21M+JffVKmz9XXYeGx2MmpllUzCUbD7vEBM+KxJs5XQ+iZs5sslLFdfjMaWbrFYgUmMLX6fz4HXABR6zFIBH/iIvtijgX4dkXHUWssRHZD96Qo2ATHWVhM/xW4ut1LkLJt1c9U44L9eofZ2Zwp5vLyEIem6c2Nmwx0eo4uc2G+k5CTMF8WfWYRMYPHpksM=&X-Amz-SignedHeaders=host&response-content-disposition=&X-Amz-Signature=2395e814f4d8daa5ae86f9b40b76c16f042757008c595fc1c","https://s3.us-west-2.amazonaws.com/link.link2.website.com/link-file/item-file/item_id=168cc901-41fe-4994-a5dd-fbcc7bf1d649/date=2021-10-01/item-file-test (2).xlsx?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIATIQ7FVSIUGCQZL7N/20220106/us-west-2/s3/aws4_request&X-Amz-Date=20220106T072037Z&X-Amz-Expires=14400&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEJj//////////wEaCXVzLXdlc3QtMiJHMEUCIQD8zcE7Dk0NBD2F/r9hyTzZop0+eJ+nQAthpBO3OaGR7AIgI03YGJOTcNzQ79JjZYQvI4HD4A8hKNC5Edq/SXiMZTEqugIIoP//////////ARADGgwyMjQ0NNpe7sy2dtEb+toeBydBYt+5PfH6o1ISCeGe6WfuUaFQZEM0Yl2AUGhGb06S8dTDEsNqOBjqaAadtJx31fGUhIHkaE21M+JffVKmz9XXYeGx2MmpllUzCUbD7vEBM+KxJs5XQ+iZs5sslLFdfjMaWbrFYgUmMLX6fz4HXABR6zFIBH/iIvtijgX4dkXHUWssRHZD96Qo2ATHWVhM/xW4ut1LkLJt1c9U44L9eofZ2Zwp5vLyEIem6c2Nmwx0eo4uc2G+k5CTMF8WfWYRMYPHpksM=&X-Amz-SignedHeaders=host&response-content-disposition=&X-Amz-Signature=2395e814f4d8daa5ae86f9b40b76c16f042757008c595fc1c"];

const encoded_filename = input_uri.replace(/^.*\/([^/] ?)\?.*$/, '$1');
const plain_filename = decodeURI(encoded_filename);

console.log(plain_filename);

But I get an error saying that Uncaught (in promise) TypeError: input_uri.replace is not a function. Any idea what's wrong with my code? Any advice would help!

CodePudding user response:

Loop through the array to get filename, RegEx is for strings

const input_uri = ["https://s3.us-west-2.amazonaws.com/link.link2.website.com/link-file/item-file/item_id=168cc901-41fe-4994-a5dd-fbcc7bf1d649/date=2021-10-01/item-file-test (2).xlsx?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIATIQ7FVSIUGCQZL7N/20220106/us-west-2/s3/aws4_request&X-Amz-Date=20220106T072037Z&X-Amz-Expires=14400&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEJj//////////wEaCXVzLXdlc3QtMiJHMEUCIQD8zcE7Dk0NBD2F/r9hyTzZop0+eJ+nQAthpBO3OaGR7AIgI03YGJOTcNzQ79JjZYQvI4HD4A8hKNC5Edq/SXiMZTEqugIIoP//////////ARADGgwyMjQ0NNpe7sy2dtEb+toeBydBYt+5PfH6o1ISCeGe6WfuUaFQZEM0Yl2AUGhGb06S8dTDEsNqOBjqaAadtJx31fGUhIHkaE21M+JffVKmz9XXYeGx2MmpllUzCUbD7vEBM+KxJs5XQ+iZs5sslLFdfjMaWbrFYgUmMLX6fz4HXABR6zFIBH/iIvtijgX4dkXHUWssRHZD96Qo2ATHWVhM/xW4ut1LkLJt1c9U44L9eofZ2Zwp5vLyEIem6c2Nmwx0eo4uc2G+k5CTMF8WfWYRMYPHpksM=&X-Amz-SignedHeaders=host&response-content-disposition=&X-Amz-Signature=2395e814f4d8daa5ae86f9b40b76c16f042757008c595fc1c", "https://s3.us-west-2.amazonaws.com/link.link2.website.com/link-file/item-file/item_id=168cc901-41fe-4994-a5dd-fbcc7bf1d649/date=2021-10-01/item-file-test (2).xlsx?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIATIQ7FVSIUGCQZL7N/20220106/us-west-2/s3/aws4_request&X-Amz-Date=20220106T072037Z&X-Amz-Expires=14400&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEJj//////////wEaCXVzLXdlc3QtMiJHMEUCIQD8zcE7Dk0NBD2F/r9hyTzZop0+eJ+nQAthpBO3OaGR7AIgI03YGJOTcNzQ79JjZYQvI4HD4A8hKNC5Edq/SXiMZTEqugIIoP//////////ARADGgwyMjQ0NNpe7sy2dtEb+toeBydBYt+5PfH6o1ISCeGe6WfuUaFQZEM0Yl2AUGhGb06S8dTDEsNqOBjqaAadtJx31fGUhIHkaE21M+JffVKmz9XXYeGx2MmpllUzCUbD7vEBM+KxJs5XQ+iZs5sslLFdfjMaWbrFYgUmMLX6fz4HXABR6zFIBH/iIvtijgX4dkXHUWssRHZD96Qo2ATHWVhM/xW4ut1LkLJt1c9U44L9eofZ2Zwp5vLyEIem6c2Nmwx0eo4uc2G+k5CTMF8WfWYRMYPHpksM=&X-Amz-SignedHeaders=host&response-content-disposition=&X-Amz-Signature=2395e814f4d8daa5ae86f9b40b76c16f042757008c595fc1c", "https://s3.us-west-2.amazonaws.com/link.link2.website.com/link-file/item-file/item_id=168cc901-41fe-4994-a5dd-fbcc7bf1d649/date=2021-10-01/item-file-test (2).xlsx?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIATIQ7FVSIUGCQZL7N/20220106/us-west-2/s3/aws4_request&X-Amz-Date=20220106T072037Z&X-Amz-Expires=14400&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEJj//////////wEaCXVzLXdlc3QtMiJHMEUCIQD8zcE7Dk0NBD2F/r9hyTzZop0+eJ+nQAthpBO3OaGR7AIgI03YGJOTcNzQ79JjZYQvI4HD4A8hKNC5Edq/SXiMZTEqugIIoP//////////ARADGgwyMjQ0NNpe7sy2dtEb+toeBydBYt+5PfH6o1ISCeGe6WfuUaFQZEM0Yl2AUGhGb06S8dTDEsNqOBjqaAadtJx31fGUhIHkaE21M+JffVKmz9XXYeGx2MmpllUzCUbD7vEBM+KxJs5XQ+iZs5sslLFdfjMaWbrFYgUmMLX6fz4HXABR6zFIBH/iIvtijgX4dkXHUWssRHZD96Qo2ATHWVhM/xW4ut1LkLJt1c9U44L9eofZ2Zwp5vLyEIem6c2Nmwx0eo4uc2G+k5CTMF8WfWYRMYPHpksM=&X-Amz-SignedHeaders=host&response-content-disposition=&X-Amz-Signature=2395e814f4d8daa5ae86f9b40b76c16f042757008c595fc1c"];
input_uri.forEach(uri => {
  const encoded_filename = uri.replace(/^.*\/([^/] ?)\?.*$/, '$1');
  const plain_filename = decodeURI(encoded_filename);

  console.log(plain_filename);
})

CodePudding user response:

input_uri is an array with one string element (because you wrapped it in []s).

.replace is a method available on strings themselves, not arrays.

So you'll need to either get rid of the array braces, or do something like input_uri[0].replace(.. depending on your needs.

CodePudding user response:

Here input_uri is an array, not string and replace is a method available on strings type, not array type.

So you can use input_uri[0].replace(/^.*\/([^/] ?)\?.*$/, '$1');

const input_uri = ["https://s3.us-west-2.amazonaws.com/link.link2.website.com/link-file/item-file/item_id=168cc901-41fe-4994-a5dd-fbcc7bf1d649/date=2021-10-01/item-file-test (2).xlsx?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIATIQ7FVSIUGCQZL7N/20220106/us-west-2/s3/aws4_request&X-Amz-Date=20220106T072037Z&X-Amz-Expires=14400&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEJj//////////wEaCXVzLXdlc3QtMiJHMEUCIQD8zcE7Dk0NBD2F/r9hyTzZop0+eJ+nQAthpBO3OaGR7AIgI03YGJOTcNzQ79JjZYQvI4HD4A8hKNC5Edq/SXiMZTEqugIIoP//////////ARADGgwyMjQ0NNpe7sy2dtEb+toeBydBYt+5PfH6o1ISCeGe6WfuUaFQZEM0Yl2AUGhGb06S8dTDEsNqOBjqaAadtJx31fGUhIHkaE21M+JffVKmz9XXYeGx2MmpllUzCUbD7vEBM+KxJs5XQ+iZs5sslLFdfjMaWbrFYgUmMLX6fz4HXABR6zFIBH/iIvtijgX4dkXHUWssRHZD96Qo2ATHWVhM/xW4ut1LkLJt1c9U44L9eofZ2Zwp5vLyEIem6c2Nmwx0eo4uc2G+k5CTMF8WfWYRMYPHpksM=&X-Amz-SignedHeaders=host&response-content-disposition=&X-Amz-Signature=2395e814f4d8daa5ae86f9b40b76c16f042757008c595fc1c","https://s3.us-west-2.amazonaws.com/link.link2.website.com/link-file/item-file/item_id=168cc901-41fe-4994-a5dd-fbcc7bf1d649/date=2021-10-01/item-file-test (2).xlsx?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIATIQ7FVSIUGCQZL7N/20220106/us-west-2/s3/aws4_request&X-Amz-Date=20220106T072037Z&X-Amz-Expires=14400&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEJj//////////wEaCXVzLXdlc3QtMiJHMEUCIQD8zcE7Dk0NBD2F/r9hyTzZop0+eJ+nQAthpBO3OaGR7AIgI03YGJOTcNzQ79JjZYQvI4HD4A8hKNC5Edq/SXiMZTEqugIIoP//////////ARADGgwyMjQ0NNpe7sy2dtEb+toeBydBYt+5PfH6o1ISCeGe6WfuUaFQZEM0Yl2AUGhGb06S8dTDEsNqOBjqaAadtJx31fGUhIHkaE21M+JffVKmz9XXYeGx2MmpllUzCUbD7vEBM+KxJs5XQ+iZs5sslLFdfjMaWbrFYgUmMLX6fz4HXABR6zFIBH/iIvtijgX4dkXHUWssRHZD96Qo2ATHWVhM/xW4ut1LkLJt1c9U44L9eofZ2Zwp5vLyEIem6c2Nmwx0eo4uc2G+k5CTMF8WfWYRMYPHpksM=&X-Amz-SignedHeaders=host&response-content-disposition=&X-Amz-Signature=2395e814f4d8daa5ae86f9b40b76c16f042757008c595fc1c","https://s3.us-west-2.amazonaws.com/link.link2.website.com/link-file/item-file/item_id=168cc901-41fe-4994-a5dd-fbcc7bf1d649/date=2021-10-01/item-file-test (2).xlsx?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIATIQ7FVSIUGCQZL7N/20220106/us-west-2/s3/aws4_request&X-Amz-Date=20220106T072037Z&X-Amz-Expires=14400&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEJj//////////wEaCXVzLXdlc3QtMiJHMEUCIQD8zcE7Dk0NBD2F/r9hyTzZop0+eJ+nQAthpBO3OaGR7AIgI03YGJOTcNzQ79JjZYQvI4HD4A8hKNC5Edq/SXiMZTEqugIIoP//////////ARADGgwyMjQ0NNpe7sy2dtEb+toeBydBYt+5PfH6o1ISCeGe6WfuUaFQZEM0Yl2AUGhGb06S8dTDEsNqOBjqaAadtJx31fGUhIHkaE21M+JffVKmz9XXYeGx2MmpllUzCUbD7vEBM+KxJs5XQ+iZs5sslLFdfjMaWbrFYgUmMLX6fz4HXABR6zFIBH/iIvtijgX4dkXHUWssRHZD96Qo2ATHWVhM/xW4ut1LkLJt1c9U44L9eofZ2Zwp5vLyEIem6c2Nmwx0eo4uc2G+k5CTMF8WfWYRMYPHpksM=&X-Amz-SignedHeaders=host&response-content-disposition=&X-Amz-Signature=2395e814f4d8daa5ae86f9b40b76c16f042757008c595fc1c"];

const encoded_filename = input_uri[0].replace(/^.*\/([^/] ?)\?.*$/, '$1');
const plain_filename = decodeURI(encoded_filename);

console.log(plain_filename);

  •  Tags:  
  • Related