在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(1或2位)PHRASE2(带空格的混合类型)WORD1(单字混合类型,无空格)INTEGER2(1或2位数)< / p>
所以我应该得到:
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,但不能完全得到我需要的东西,最后手工分隔。但我确信它可以做到,尽管有一个更大脑的人。 regEx有很多例子,但我找不到任何处理短语的例子;所以我想知道是否有人可以帮助我。谢谢。
答案 0 :(得分:2)
尝试以下方法:
var s = "Three Blind Mice 13 Agents of Cheese Super 18";
s.replace(/([^\d]+) (\d{1,2}) ([^\d]+) ([A-Z][a-z]+) (\d{1,2})/, '$1, $2, $3, $4, $5')
// "Three Blind Mice, 13, Agents of Cheese, Super, 18"
<强> DEMO 强>
答案 1 :(得分:2)
这是尝试使用适用于示例字符串的正则表达式:
/^\b((?:[a-z]+ ?)+)\b (\d{1,2}) \b((?:[a-z]+ ?)+)\b (\b[a-z]+\b) (\d{1,2})$/i
基本上,它由五个不同的部分组成,每个部分都符合您的描述:
注意事项:
^
(主题开头)和$
(主题结束)来考虑完整字符串。/.../
之后,我添加了一个标志,它改变了正则表达式引擎的行为方式。 i
- 标志使得匹配不区分大小。您可以按如下方式使用它:
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');
编辑:我已更新演示以创建名为resultCollection
的变量来保存已处理的结果。它是一个对象,由每个原始字符串组成,并将处理后的结果字符串作为值。