【问题标题】:Extracting a complicated part of the string with plain Javascript使用纯 Javascript 提取字符串的复杂部分
【发布时间】:2019-03-20 04:30:47
【问题描述】:

我有以下字符串:

<a href="https://my.domain.com/personal/jan_kowalski_pl_company_com/Documents/Forms/All.aspx">Text</a>

我想从这个字符串中提取,使用 JavaScript 'pl' 或 'pl_company_com'

有几个变量:

  • jan_kowalski是一个可以改变的名字和姓氏,有时甚至有3个元素

  • 国家代码(在本例中为“pl”)将更改为其他 en/de/fr(这是我要获取的字符串的那部分)

  • 字符串的其余部分在每种情况下都保持不变(开头 + 以 _company_com 开头之后的所有内容 ...

附言。我试着用 split 来做,但是我对 JS 的了解非常基础,我无法得到我想要的,请帮助

【问题讨论】:

  • 您可以发布您的.split 方法吗?

标签: javascript jquery css-selectors google-tag-manager


【解决方案1】:

使用正则表达式替代 Randy Casburn 的解决方案

let out = new URL('https://my.domain.com/personal/jan_kowalski_pl_company_com/Documents/Forms/All.aspx').href.match('.*_(.*_company_com)')[1];

console.log(out);

或者,如果您只想使用您指定的国家/地区代码获取该字符串

let out = new URL('https://my.domain.com/personal/jan_kowalski_pl_company_com/Documents/Forms/All.aspx').href.match('.*_((en|de|fr|pl)_company_com)')[1];

console.log(out);

let out = new URL('https://my.domain.com/personal/jan_kowalski_pl_company_com/Documents/Forms/All.aspx').href.match('.*_((en|de|fr|pl)_company_com)')[1];

console.log(out);

此解决方案也适用于其他组合的概念证明

let urls = [
new URL('https://my.domain.com/personal/jan_kowalski_pl_company_com/Documents/Forms/All.aspx'),
new URL('https://my.domain.com/personal/firstname_middlename_lastname_pl_company_com/Documents/Forms/All.aspx')
]

urls.forEach(url => console.log(url.href.match('.*_(en|de|fr|pl).*')[1]))

【讨论】:

  • 更好 - 很好地使用 RegEx!
  • 好的,我想通了,但是如果我只想得到 pl 怎么办?
  • 如果你只想要国家代码,试试url.href.match('.*_(en|de|fr|pl).*')[1]。查看上次更新
【解决方案2】:

我之前在正则表达式的这类问题上非常成功:

var string = '<a href="https://my.domain.com/personal/jan_kowalski_pl_company_com/Documents/Forms/All.aspx">Text</a>';
var regExp = /([\w]{2})_company_com/;

find = string.match(regExp);

console.log(find); // array with found matches
console.log(find[1]); // first group of regexp = country code

首先你得到了你给定的字符串。其次,你有一个正则表达式,它在开头和结尾用两个斜杠标记。正则表达式主要用于字符串搜索(您甚至可以用它替换所有主要编辑器中的复杂文本,这非常有用)。 在这种情况下,它恰好匹配两个单词字符[\w]{2},紧跟_company_com\w 表示单词字符,[] 组所有想要的字符类型,这里只有单词字符,{} 表示要找到的字符数)。现在要找到想要的部分 string.match(regExp) 必须被调用以获取所有捕获的结果。它返回一个数组,其中包含整个捕获的字符串,后跟 regExp 中的所有捕获组(由 () 表示)。因此,在这种情况下,您将获得带有 find[1] 的国家/地区代码,这是正则表达式的第一个也是唯一一个捕获组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-22
    • 1970-01-01
    • 2012-03-28
    • 1970-01-01
    • 1970-01-01
    • 2015-01-20
    • 2020-11-18
    相关资源
    最近更新 更多