gpt4 book ai didi

javascript - 如何在 JavaScript 中使用正则表达式拆分由多个部分组成的字符串?

转载 作者:行者123 更新时间:2023-11-29 10:20:54 25 4
gpt4 key购买 nike

我在使用 JavaScript 中的正则表达式时遇到问题。我有很多字符串需要用逗号分隔。不幸的是,子字符串周围没有引号,这会让生活更轻松。

var str1 = "Three Blind Mice 13 Agents of Cheese Super 18"
var str2 = "An Old Woman Who Lived in a Shoe 7 Pixies None 12"
var str3 = "The Cow Jumped Over The Moon 21 Crazy Cow Tales Wonderful 9"

它们的形式是 PHRASE1(带空格的混合类型") INTEGER1(一位或两位数) PHRASE2(带空格的混合类型") WORD1(单字混合类型,无空格) INTEGER2(一位或两位数)

所以我应该得到:

result1 = "Three Blind Mice,13,Agents of Cheese,Super,18"
result2 = "An Old Woman Who Lived in a Shoe,7,Pixies,None,12"
result3 = "A Cow Jumped Over The Moon,21, Crazy Cow Tales,Wonderful,9"

我查看了 txt2re.com,但无法完全找到我需要的内容,最后只能手动定界。但我相信这是可以做到的,尽管是有更大头脑的人。有很多正则表达式的例子,但我找不到任何处理短语的例子;所以我想知道是否有人可以帮助我。谢谢。

最佳答案

这是对适用于您的示例字符串的正则表达式的尝试:

/^\b((?:[a-z]+ ?)+)\b (\d{1,2}) \b((?:[a-z]+ ?)+)\b (\b[a-z]+\b) (\d{1,2})$/i

基本上,它由五个不同的部分组成,每个部分的设计都符合您的描述:

  1. \b((?:[a-z]+ ?)+)\b = 匹配由 a-z 组成的词,后面可以有一个空格。然后我们尽可能多地对其进行量化(i 标志使搜索不区分大小写)
  2. (\d{1,2}) = 匹配一位或两位数字。也可以写成[0-9]。
  3. \b((?:[a-z]+ ?)+)\b = 与 nr 1 相同。
  4. (\b[a-z]+\b) = 匹配由 a-z 组成的单个单词
  5. (\d{1,2}) = 与 nr 2 相同。

注意事项:

  1. 我已锚定匹配以确保它只考虑使用 ^(主题开始)和 $(主题结束)的完整字符串。
  2. 在正则表达式分隔符 /.../ 之后,我添加了一个标志 来改变正则表达式引擎的行为方式。 i 标志使匹配不区分大小写。
  3. 需要注意的是,像“it's”这样的缩写词不会被当前的正则表达式匹配。您将需要修改正则表达式组 1 和 3 以适应这种情况。
  4. 各组由一个空格分隔。如果这可能会有所不同,那么您需要修改组分隔符。

您可以按如下方式使用它:

var regex = /^\b((?:[a-z]+ ?)+)\b (\d{1,2}) \b((?:[a-z]+ ?)+)\b (\b[a-z]+\b) (\d{1,2})$/i;
var s = "The Cow Jumped Over The Moon 21 Crazy Cow Tales Wonderful 9";
s = s.replace(regex, '$1, $2, $3, $4, $5');

JS-fiddle demo here

编辑:我更新了演示以创建一个名为 resultCollection 的变量来保存处理后的结果。它是一个对象,由每个原始字符串作为键,处理后的结果字符串作为值。

关于javascript - 如何在 JavaScript 中使用正则表达式拆分由多个部分组成的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12315121/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com