我正在尝试在Javascript中创建一个正则表达式,以便将:)
与周围文本分开。
鉴于以下内容:
:)这是一行文字:)里面有几个表情符号:)。所以那里,。:):)
我想得到8组:
目前我使用的([^:)]+)
只对没有表情符号的周围文本进行分组。我可以进行哪些调整,以便将笑脸分组?
答案 0 :(得分:2)
分裂:
var string = "Given the following: :)This is a line of text :) with several smileys in it :). So there.,:):)";
var groups = string.split(/:\)/);
这将返回一个数组,其中每个元素都是没有:)
的文本的一部分。
由于文本已在每个:)
上拆分,我们可以通过在文本的每个部分之间添加:)
来构建您想要的结果:
var parts = [groups[0]];
for (var i = 1; i < groups.length; ++i) {
parts.push(':)');
parts.push(groups[i]);
}
结果如下:
在此处尝试:http://jsfiddle.net/Gxr6U/3/
如果您想用图像替换表情符号,可以这样做:
var frags = document.createDocumentFragment();
frags.appendChild(document.createTextNode(groups[0]));
for (var i = 1; i < groups.length; ++i) {
var img = document.createElement('img');
img.src='http://../smiley.png';
frags.push(img);
frags.appendChild(document.createTextNode(groups[i]));
}
如果你只想删除表情符号:
var text = groups.join('');
答案 1 :(得分:2)
我建议:
var str = ":)This is a line of text :) with several smileys in it :). So there.,:):)",
matches = str.split(/(\:\))/);
console.log(matches);
添加了过滤以从上面删除空匹配:
var str = ":)This is a line of text :) with several smileys in it :). So there.,:):)",
matches = str.split(/(\:\))/),
matched = [];
for (var i = 0, len = matches.length; i < len; i++) {
if (matches[i].length) {
matched.push(matches[i]);
}
}
console.log(matched);
另一个版本,带有实际的屏幕输出:
var str = ":)This is a line of text :) with several smileys in it :). So there.,:):)",
matches = str.split(/(\:\))/),
matched = [], li,
list = document.createElement('ol');
document.body.appendChild(list);
for (var i = 0, len = matches.length; i < len; i++) {
if (matches[i].length) {
matched.push(matches[i]);
li = document.createElement('li');
txt = document.createTextNode(matches[i]);
li.appendChild(txt);
list.appendChild(li);
}
}
console.log(matched);
答案 2 :(得分:0)
以下内容将成功分组您提到的字符串:
your_match = your_string.match(/(:\)|[^:)]*)/g)
但是,与原始的RegExp一样,如果出现:
或)
而没有笑脸,则会遇到问题。如果没有笑脸,这些角色将从匹配组中消失。
答案 3 :(得分:0)
您可以使用此模式:
/:\)|(?:[^:]+|:(?!\)))+/g
这匹配:)
或除:
之外的任何字符或未跟随:
的{{1}}。