我必须找到并替换给定文本中的所有Facebook风格表情符号,但找不到正确的正则表达式。根据经验,必须匹配用户有意输入的所有表情符号,不匹配可以是地址,数字,运输代码,链接,随机文本ecc的一部分。 ..
这一个(^|\s)(:D|:\/)(\s|\W|$)
不适用于我测试的所有案例(标有"must match"
和"must not match"
):
:D "must match" Sample text for testing:
abcdefghijkl:Dm "must not match" nopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
0123456789 +-:D.,! "must not match" @#$%^&*();\/|<>"' "must match" :/.
12345 :/-98.7 "must not match" 3.141 ://.6180 "must not match" 9,000 +42
555.123.4567 :D+1-(80 "must not match" :D555-2468: "must not match"
foo@demo.net "must match" bar.ba@test.co.uk :D
:/ "must match" http://"must not match"foo.co.uk/ "must match" :D?
http://regexr.com/foo.html?q=bar
:D
:/
:D
:D
"must all 4 match"
实时测试用例:http://regexr.com/3ad1j
我还尝试了(^|\s|\B)(:D|:\/)(\s|\B|\b|$)
,它匹配所有"must match"
,但也匹配了"must not match"
...
为了举例,这个正则表达式只有两个表情符号,在实际情况下我有一个50个表情符号的数组来查找和替换相应的表情符号。
更新:新的测试用例http://regexr.com/3ad6i包含已更新的(^|\s)(:D|:\/)(?=\s|[^0-9A-Za-z+-]|$)
正则表达式,仍有一些"must not match"
可以消除。
更新2:使用更新的(^|\s)(:D|:\/)(?=\s|[^"-(*+\-/->@-~]|$)
正则表达式更新了测试用例http://regexr.com/3ad6i,工作正常,我可以通过某种方式改进吗?