我有一个带有查询字符串的URL,该字符串以特定字母开头和结尾。这是一个例子和我的方法:
假设地址栏中的网址为"http://localhost:3001/build/?videoUrl=bitcoin.vid.com/money#/"
我首先使用window.location.href
提取此网址并将其保存在变量x
中。
现在,我想首先检查网址中是否存在videoUrl
,然后如果它可用,我会拆分网址并提取所需的网址bitcoin.vid.com/money
let x = "http://localhost:3001/build/?videoUrl=bitcoin.vid.com/money#/";
let y;
let result;
if(x.indexOf("?videoUrl")>-1) {
y = x.split("?videoUrl=");
result = y[1].split("#")[0];
console.log("Resultant URL:", result);
}
我觉得我写的整个代码有点麻烦。如果还有更优雅的方式可以让我知道吗?
注意:videoUrl
始终不在URL中,因此请检查它是否存在。如果我需要进一步检查,请告诉我吗?
谢谢。
安吉拉
答案 0 :(得分:11)
您的方法有效,这是主要的 - 但为了更清晰,更健壮的方法,您可以使用内置的JavaScript URL()
类。
null

如果您的const getParamFromUrl = (url, param) =>
(new URL(url)).searchParams.get(param);
参数不存在,那么这只会返回CustomDbContext
,您可以相应地处理
如果你想让它更加可重复使用,这里有一个能满足你需要的功能:
SqlServer
在文档中有关于此实现和兼容性的更多信息,请访问:https://developer.mozilla.org/en-US/docs/Web/API/URL
答案 1 :(得分:1)
好问题!
整洁解决方案的两个选项:
/*
Output:
const T& (struct)
const T& (sfinae)
const T& (sfinae bad)
---
const T& (struct)
const T& (sfinae)
const T& (sfinae bad)
---
T&& (struct)
T&& (sfinae)
const T& (sfinae bad)
---
T&& (struct)
T&& (sfinae)
const T& (sfinae bad)
---
*/
#include <iostream>
#include <type_traits>
using namespace std;
struct Value {};
template <typename T>
struct greedy_struct {
static void run(const T&) {
cout << "const T& (struct)" << endl;
}
static void run(T&&) {
cout << "T&& (struct)" << endl;
}
};
// Per Toby's answer.
template <typename T>
void greedy_sfinae(const T&) {
cout << "const T& (sfinae)" << endl;
}
template <
typename T,
typename = std::enable_if_t<std::is_rvalue_reference<T&&>::value>>
void greedy_sfinae(T&&) {
cout << "T&& (sfinae)" << endl;
}
// Bad.
template <typename T>
void greedy_sfinae_bad(const T&) {
cout << "const T& (sfinae bad)" << endl;
}
template <
typename T,
typename = std::enable_if_t<std::is_rvalue_reference<T>::value>>
void greedy_sfinae_bad(T&&) {
cout << "T&& (sfinae bad)" << endl;
}
template <typename TF>
void greedy(TF&& value) {
using T = std::decay_t<TF>;
greedy_struct<T>::run(std::forward<TF>(value));
greedy_sfinae(std::forward<TF>(value));
greedy_sfinae_bad(std::forward<TF>(value));
cout << "---" << endl;
}
int main() {
Value x;
const Value y;
greedy(x);
greedy(y);
greedy(Value{});
greedy(std::move(x));
return 0;
}
- 在我看来,它更简单