【发布时间】:2016-09-27 16:19:44
【问题描述】:
var str = "4/16/14, 10:24 AM - John Doe: How is everything going on? Check this: iPhone7!"
我想检查字符串是否包含与AM - <some-name>: 匹配的子字符串。例如,在上面的字符串中,它应该匹配AM - John Doe: 并返回John Doe。 (当然,一旦匹配,我可以使用子字符串获取名称)。此外,有时AM - John Doe: 中可能会有特殊字符而不是空格。正则表达式在这种情况下也应该起作用。
例如:
var str1 = "4/16/14, 10:24 AM - John Doe likes your photo";
var str2 = "4/16/14, 10:24 AM John Doe replied to your comment";
var str3 = "4/16/14, 10:24 AM John Doe: Whats going on";
var str4 = "4/16/14, 10:24 AM John Doe: Whats going on : hmmm";
正则表达式应该匹配 str3 和 str4,因为它包含一个以 AM 开头的子字符串并以第一个 :
结尾对于 str3 和 str4,我想取名为 John Doe。 注意:str1 和 str2 也有 John Doe,但它不会立即跟随 :
我尝试过的表达方式:
str.match(/[AP]M - \w+[ ]?\w+[ ]?\w+:./);
当有特殊字符(例如 UTF-8 字符)时,上述方法会失败。不可见,但似乎有 e2 80 80 等字符。
【问题讨论】:
-
可以有哪些特殊字符?
-
请提供有效匹配和无效字符串的示例。
-
如果您使用否定字符类,它将匹配除类内字符之外的任何字符。我想它适合你的情况。
-
你在问题中提到的符号是
U+2000, EN QUAD。会计。对于 MDN,\s匹配[ \f\n\r\t\v\u00a0\u1680\u180e\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]。我认为/\b[AP]M\s+(?:-\s+)?([^:]+):/应该适合你。如果没有,请尝试我目前的答案。
标签: javascript string