我正在javascript
Regex
格式化日期时间字符串,所以我想:
答案 0 :(得分:1)
您发布的正则表达式不会将System.out.println(freeSpot.get(0)[0]);
视为单词边界,因此它不会按预期替换该字符。
为了在要替换 System.out.println(freeSpot.get(0)[1]);
字符之前或之后包含此字符,您可以使用与以下类似的表达式:
替换_
:
d
替换d
:
/(\b|_)(d)(\b|_)/mg
或者以同样的方式替换它们(如果它可以接受):
dd
在this answer in another thread on StackOverflow下的评论中,还建议使用可以格式化日期的库,而不是自己实现它。
更新:正如有人提到的,问题还在于,在正则表达式中包含/(\b|_)(dd)(\b|_)/mg
,在替换后将其删除。但是,您可以调用replace并使用捕获括号引用,如下所示:
/(\b|_)(d|dd)(\b|_)/mg
我已更新此答案中发布的早期表达式,以便使用此方法。
请注意,我不知道您要考虑的所有情况,因此如果您在使用建议的解决方案时遇到任何问题或者在您的情况下无法正常工作,请告诉我,所以我可以尝试帮助。
答案 1 :(得分:1)
我可以使用前瞻,如果你不使用JavaScript,那么也可以使用lookbehind。
示例lookahead检查是否没有以下字符:
(?=[^a-zA-Z])
如果您使用的是JavaScript,它不支持lookbehind,因此您需要使用捕获组和反向引用。
对于JS捕获最外面括号中的部分,然后使用\ 1,\ 2 ...来定位:
[^a-zA-Z](d(?=[^a-zA-Z]))
非JS可以使用lookbehind:
(?<=[^a-zA-Z])d(?=[^a-zA-Z])