【问题标题】:How can i pull a string from a string of words?我如何从一串单词中拉出一个字符串?
【发布时间】:2018-07-19 10:05:15
【问题描述】:

我有一个字符串“2018 年 3 月至 2018 年 6 月之间的日期”,或者该字符串可能类似于
“显示 2018 年 3 月至 2018 年 6 月之间的日期”。

所以我想将第一个月的年份(即 2018 年 3 月)存储在一个变量中,并将下一个月的年份(即 2018 年 6 月)存储在另一个变量中。

月份可以是十二月、十月……等等。

我想用 JavaScript 编写代码,将任意 2 个月的年份存储在 2 个单独的变量中。

对此的任何帮助将不胜感激。

【问题讨论】:

  • 你试过什么?请包括您编写的遇到问题的代码。
  • 点击按钮提取部分字符串。

  • 把你的代码放在你的问题中。
  • JS 中做这样的事情似乎是一种利用,为什么不考虑在服务器端做呢?这是你的作业吗?
  • 此代码不是动态的...如果月份更改为 12 月,它不会给我所需的输出

标签: javascript arrays


【解决方案1】:

您可以使用以下RegExp

const str = "Show me the date between March 2018 and June 2018";

const [start, end] = str.match(/((January|February|March|April|May|June|July|August|September|October|November|December) \d{4})/gi);

console.log(start, end);

【讨论】:

  • 再次,如果我有相同的字符串..“2018 年 3 月至 2018 年 6 月之间的日期”我们如何将 2018 年 3 月和 2018 年 6 月之间的月份放入一个数组中......即字符串...... March 2018年、2018年4月、2018年5月、2018年6月成数组?
  • @Shrey 您只需将匹配的项目数组分配给一个变量: const str = "Show me the date between March 2018 and June 2018"; const arr = str.match(/((一月|二月|三月|四月|五月|六月|七月|八月|九月|十月|十一月|十二月)\d{4})/gi);
【解决方案2】:

您可以使用正则表达式获取每个 月-年 一对字符串并将每个匹配项存储到一个数组中

代码如下:

var str = "Show me the date between March 2018, June 2018 and December 2019"; 
var res = str.match(/(\w*\s\d{4})/g);

console.log(res);

现在你只需要遍历数组并对每个值做任何你想做的事情。

希望对您有所帮助。

【讨论】:

  • 再次,如果我有相同的字符串..“2018 年 3 月至 2018 年 6 月之间的日期”我们如何将 2018 年 3 月和 2018 年 6 月之间的月份放入一个数组中......即字符串...... March 2018年、2018年4月、2018年5月、2018年6月成数组
【解决方案3】:

虽然你的问题写得不太恰当,但下面的代码可以工作:

const months = [
  'January',
  'February',
  'March',
  'April',
  'May',
  'June',
  'July',
  'August',
  'September',
  'October',
  'November',
  'December'
];

const reg = new RegExp(`(${months.join('|')})\\s[\\d]{4}`, 'gi');
const str = 'Date between March 2018 and June 2018';
const matches = str.match(reg).map((item) => item.split(' '));
console.log(matches)

【讨论】:

  • 你应该去掉你的正则表达式中的+,否则你会匹配像JanunaryJanunary 2018这样的字符串。
  • 再次,如果我有相同的字符串..“2018 年 3 月至 2018 年 6 月之间的日期”我们如何将 2018 年 3 月和 2018 年 6 月之间的月份放入一个数组中......即字符串...... March 2018年、2018年4月、2018年5月、2018年6月成数组
【解决方案4】:

您可以使用 split 函数来拆分字符串并提取有用的信息。

我已经在 jsfiddler 上为您编写了一个脚本。

请看here

var temp="Date between March 2018 and June 2018";
var fields=temp.split(' ');
var date2=fields[fields.length-2] +" "+fields[fields.length-1];

var date1=fields[fields.length-5] +" "+fields[fields.length-4];
alert(date1);//March 2018
alert(date2);//June 2018

【讨论】:

  • 这不应该被接受的答案。代码是绝对静态的,我的意思是如果字符串不完全是示例中的那个,它就不能正常工作。您应该能够动态地检测到任何月-年对。
  • 再次,如果我有相同的字符串..“2018 年 3 月至 2018 年 6 月之间的日期”我们如何将 2018 年 3 月和 2018 年 6 月之间的月份放入一个数组中......即字符串...... March 2018年、2018年4月、2018年5月、2018年6月成数组
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-17
  • 2018-05-14
  • 1970-01-01
  • 1970-01-01
  • 2021-01-22
  • 1970-01-01
相关资源
最近更新 更多