试图对数组进行RegExp,但获取未捕获的TypeError:x不是函数



我正试图从S3预签名URL的数组中获取文件名。代码如下:

const input_uri = ["https://s3.us-west-2.amazonaws.com/link.link2.website.com/link-file/item-file/item_id%3D168cc901-41fe-4994-a5dd-fbcc7bf1d649/date%3D2021-10-01/item-file-test%20%282%29.xlsx?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIATIQ7FVSIUGCQZL7N%2F20220106%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20220106T072037Z&X-Amz-Expires=14400&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEJj%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLXdlc3QtMiJHMEUCIQD8zcE7Dk0NBD2F%2Fr9hyTzZop0%2BeJ%2BnQAthpBO3OaGR7AIgI03YGJOTcNzQ79JjZYQvI4HD4A8hKNC5Edq%2FSXiMZTEqugIIoP%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FARADGgwyMjQ0NNpe7sy2dtEb%2BtoeBydBYt%2B5PfH6o1ISCeGe6WfuUaFQZEM0Yl2AUGhGb06S8dTDEsNqOBjqaAadtJx31fGUhIHkaE21M%2BJffVKmz9XXYeGx2MmpllUzCUbD7vEBM%2BKxJs5XQ%2BiZs5sslLFdfjMaWbrFYgUmMLX6fz4HXABR6zFIBH%2FiIvtijgX4dkXHUWssRHZD96Qo2ATHWVhM%2FxW4ut1LkLJt1c9U44L9eofZ2Zwp5vLyEIem6c2Nmwx0eo4uc2G%2Bk5CTMF8WfWYRMYPHpksM%3D&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%3D168cc901-41fe-4994-a5dd-fbcc7bf1d649/date%3D2021-10-01/item-file-test%20%282%29.xlsx?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIATIQ7FVSIUGCQZL7N%2F20220106%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20220106T072037Z&X-Amz-Expires=14400&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEJj%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLXdlc3QtMiJHMEUCIQD8zcE7Dk0NBD2F%2Fr9hyTzZop0%2BeJ%2BnQAthpBO3OaGR7AIgI03YGJOTcNzQ79JjZYQvI4HD4A8hKNC5Edq%2FSXiMZTEqugIIoP%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FARADGgwyMjQ0NNpe7sy2dtEb%2BtoeBydBYt%2B5PfH6o1ISCeGe6WfuUaFQZEM0Yl2AUGhGb06S8dTDEsNqOBjqaAadtJx31fGUhIHkaE21M%2BJffVKmz9XXYeGx2MmpllUzCUbD7vEBM%2BKxJs5XQ%2BiZs5sslLFdfjMaWbrFYgUmMLX6fz4HXABR6zFIBH%2FiIvtijgX4dkXHUWssRHZD96Qo2ATHWVhM%2FxW4ut1LkLJt1c9U44L9eofZ2Zwp5vLyEIem6c2Nmwx0eo4uc2G%2Bk5CTMF8WfWYRMYPHpksM%3D&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%3D168cc901-41fe-4994-a5dd-fbcc7bf1d649/date%3D2021-10-01/item-file-test%20%282%29.xlsx?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIATIQ7FVSIUGCQZL7N%2F20220106%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20220106T072037Z&X-Amz-Expires=14400&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEJj%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLXdlc3QtMiJHMEUCIQD8zcE7Dk0NBD2F%2Fr9hyTzZop0%2BeJ%2BnQAthpBO3OaGR7AIgI03YGJOTcNzQ79JjZYQvI4HD4A8hKNC5Edq%2FSXiMZTEqugIIoP%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FARADGgwyMjQ0NNpe7sy2dtEb%2BtoeBydBYt%2B5PfH6o1ISCeGe6WfuUaFQZEM0Yl2AUGhGb06S8dTDEsNqOBjqaAadtJx31fGUhIHkaE21M%2BJffVKmz9XXYeGx2MmpllUzCUbD7vEBM%2BKxJs5XQ%2BiZs5sslLFdfjMaWbrFYgUmMLX6fz4HXABR6zFIBH%2FiIvtijgX4dkXHUWssRHZD96Qo2ATHWVhM%2FxW4ut1LkLJt1c9U44L9eofZ2Zwp5vLyEIem6c2Nmwx0eo4uc2G%2Bk5CTMF8WfWYRMYPHpksM%3D&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);

但我收到一个错误,说Uncaught (in promise) TypeError: input_uri.replace is not a function.知道我的代码出了什么问题吗?任何建议都会有帮助!

input_uri是一个带有一个字符串元素的数组(因为您将其封装在[]s中(。

.replace是字符串本身可用的方法,而不是数组。

因此,您需要去掉数组大括号,或者根据需要执行类似input_uri[0].replace(..的操作。

循环数组以获取文件名,RegEx用于strings

const input_uri = ["https://s3.us-west-2.amazonaws.com/link.link2.website.com/link-file/item-file/item_id%3D168cc901-41fe-4994-a5dd-fbcc7bf1d649/date%3D2021-10-01/item-file-test%20%282%29.xlsx?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIATIQ7FVSIUGCQZL7N%2F20220106%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20220106T072037Z&X-Amz-Expires=14400&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEJj%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLXdlc3QtMiJHMEUCIQD8zcE7Dk0NBD2F%2Fr9hyTzZop0%2BeJ%2BnQAthpBO3OaGR7AIgI03YGJOTcNzQ79JjZYQvI4HD4A8hKNC5Edq%2FSXiMZTEqugIIoP%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FARADGgwyMjQ0NNpe7sy2dtEb%2BtoeBydBYt%2B5PfH6o1ISCeGe6WfuUaFQZEM0Yl2AUGhGb06S8dTDEsNqOBjqaAadtJx31fGUhIHkaE21M%2BJffVKmz9XXYeGx2MmpllUzCUbD7vEBM%2BKxJs5XQ%2BiZs5sslLFdfjMaWbrFYgUmMLX6fz4HXABR6zFIBH%2FiIvtijgX4dkXHUWssRHZD96Qo2ATHWVhM%2FxW4ut1LkLJt1c9U44L9eofZ2Zwp5vLyEIem6c2Nmwx0eo4uc2G%2Bk5CTMF8WfWYRMYPHpksM%3D&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%3D168cc901-41fe-4994-a5dd-fbcc7bf1d649/date%3D2021-10-01/item-file-test%20%282%29.xlsx?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIATIQ7FVSIUGCQZL7N%2F20220106%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20220106T072037Z&X-Amz-Expires=14400&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEJj%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLXdlc3QtMiJHMEUCIQD8zcE7Dk0NBD2F%2Fr9hyTzZop0%2BeJ%2BnQAthpBO3OaGR7AIgI03YGJOTcNzQ79JjZYQvI4HD4A8hKNC5Edq%2FSXiMZTEqugIIoP%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FARADGgwyMjQ0NNpe7sy2dtEb%2BtoeBydBYt%2B5PfH6o1ISCeGe6WfuUaFQZEM0Yl2AUGhGb06S8dTDEsNqOBjqaAadtJx31fGUhIHkaE21M%2BJffVKmz9XXYeGx2MmpllUzCUbD7vEBM%2BKxJs5XQ%2BiZs5sslLFdfjMaWbrFYgUmMLX6fz4HXABR6zFIBH%2FiIvtijgX4dkXHUWssRHZD96Qo2ATHWVhM%2FxW4ut1LkLJt1c9U44L9eofZ2Zwp5vLyEIem6c2Nmwx0eo4uc2G%2Bk5CTMF8WfWYRMYPHpksM%3D&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%3D168cc901-41fe-4994-a5dd-fbcc7bf1d649/date%3D2021-10-01/item-file-test%20%282%29.xlsx?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIATIQ7FVSIUGCQZL7N%2F20220106%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20220106T072037Z&X-Amz-Expires=14400&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEJj%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLXdlc3QtMiJHMEUCIQD8zcE7Dk0NBD2F%2Fr9hyTzZop0%2BeJ%2BnQAthpBO3OaGR7AIgI03YGJOTcNzQ79JjZYQvI4HD4A8hKNC5Edq%2FSXiMZTEqugIIoP%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FARADGgwyMjQ0NNpe7sy2dtEb%2BtoeBydBYt%2B5PfH6o1ISCeGe6WfuUaFQZEM0Yl2AUGhGb06S8dTDEsNqOBjqaAadtJx31fGUhIHkaE21M%2BJffVKmz9XXYeGx2MmpllUzCUbD7vEBM%2BKxJs5XQ%2BiZs5sslLFdfjMaWbrFYgUmMLX6fz4HXABR6zFIBH%2FiIvtijgX4dkXHUWssRHZD96Qo2ATHWVhM%2FxW4ut1LkLJt1c9U44L9eofZ2Zwp5vLyEIem6c2Nmwx0eo4uc2G%2Bk5CTMF8WfWYRMYPHpksM%3D&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);
})

这里input_uri是一个数组,而不是字符串,replace是字符串类型上可用的方法,而不是数组类型。

所以你可以使用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%3D168cc901-41fe-4994-a5dd-fbcc7bf1d649/date%3D2021-10-01/item-file-test%20%282%29.xlsx?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIATIQ7FVSIUGCQZL7N%2F20220106%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20220106T072037Z&X-Amz-Expires=14400&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEJj%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLXdlc3QtMiJHMEUCIQD8zcE7Dk0NBD2F%2Fr9hyTzZop0%2BeJ%2BnQAthpBO3OaGR7AIgI03YGJOTcNzQ79JjZYQvI4HD4A8hKNC5Edq%2FSXiMZTEqugIIoP%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FARADGgwyMjQ0NNpe7sy2dtEb%2BtoeBydBYt%2B5PfH6o1ISCeGe6WfuUaFQZEM0Yl2AUGhGb06S8dTDEsNqOBjqaAadtJx31fGUhIHkaE21M%2BJffVKmz9XXYeGx2MmpllUzCUbD7vEBM%2BKxJs5XQ%2BiZs5sslLFdfjMaWbrFYgUmMLX6fz4HXABR6zFIBH%2FiIvtijgX4dkXHUWssRHZD96Qo2ATHWVhM%2FxW4ut1LkLJt1c9U44L9eofZ2Zwp5vLyEIem6c2Nmwx0eo4uc2G%2Bk5CTMF8WfWYRMYPHpksM%3D&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%3D168cc901-41fe-4994-a5dd-fbcc7bf1d649/date%3D2021-10-01/item-file-test%20%282%29.xlsx?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIATIQ7FVSIUGCQZL7N%2F20220106%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20220106T072037Z&X-Amz-Expires=14400&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEJj%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLXdlc3QtMiJHMEUCIQD8zcE7Dk0NBD2F%2Fr9hyTzZop0%2BeJ%2BnQAthpBO3OaGR7AIgI03YGJOTcNzQ79JjZYQvI4HD4A8hKNC5Edq%2FSXiMZTEqugIIoP%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FARADGgwyMjQ0NNpe7sy2dtEb%2BtoeBydBYt%2B5PfH6o1ISCeGe6WfuUaFQZEM0Yl2AUGhGb06S8dTDEsNqOBjqaAadtJx31fGUhIHkaE21M%2BJffVKmz9XXYeGx2MmpllUzCUbD7vEBM%2BKxJs5XQ%2BiZs5sslLFdfjMaWbrFYgUmMLX6fz4HXABR6zFIBH%2FiIvtijgX4dkXHUWssRHZD96Qo2ATHWVhM%2FxW4ut1LkLJt1c9U44L9eofZ2Zwp5vLyEIem6c2Nmwx0eo4uc2G%2Bk5CTMF8WfWYRMYPHpksM%3D&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%3D168cc901-41fe-4994-a5dd-fbcc7bf1d649/date%3D2021-10-01/item-file-test%20%282%29.xlsx?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIATIQ7FVSIUGCQZL7N%2F20220106%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20220106T072037Z&X-Amz-Expires=14400&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEJj%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLXdlc3QtMiJHMEUCIQD8zcE7Dk0NBD2F%2Fr9hyTzZop0%2BeJ%2BnQAthpBO3OaGR7AIgI03YGJOTcNzQ79JjZYQvI4HD4A8hKNC5Edq%2FSXiMZTEqugIIoP%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FARADGgwyMjQ0NNpe7sy2dtEb%2BtoeBydBYt%2B5PfH6o1ISCeGe6WfuUaFQZEM0Yl2AUGhGb06S8dTDEsNqOBjqaAadtJx31fGUhIHkaE21M%2BJffVKmz9XXYeGx2MmpllUzCUbD7vEBM%2BKxJs5XQ%2BiZs5sslLFdfjMaWbrFYgUmMLX6fz4HXABR6zFIBH%2FiIvtijgX4dkXHUWssRHZD96Qo2ATHWVhM%2FxW4ut1LkLJt1c9U44L9eofZ2Zwp5vLyEIem6c2Nmwx0eo4uc2G%2Bk5CTMF8WfWYRMYPHpksM%3D&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);

最新更新