我正在尝试在 Javascript 中创建一个正则表达式,以将任何出现的:)
与周围的文本分开。
鉴于以下情况:
:)这是一行文字:) 里面有几个笑脸:)。所以在那里。,:):)
我想得到结果 8 组:
- :)
- 这是一行文字
- :)
- 里面有几个笑脸
- :)
- . 所以那里.,
- :)
- :)
目前我使用([^:)]+)
which 只对没有笑脸的周围文本进行分组。我可以进行哪些调整以使笑脸也被分组?
我正在尝试在 Javascript 中创建一个正则表达式,以将任何出现的:)
与周围的文本分开。
鉴于以下情况:
:)这是一行文字:) 里面有几个笑脸:)。所以在那里。,:):)
我想得到结果 8 组:
目前我使用([^:)]+)
which 只对没有笑脸的周围文本进行分组。我可以进行哪些调整以使笑脸也被分组?
分裂:
var string = "Given the following: :)This is a line of text :) with several smileys in it :). So there.,:):)";
var groups = string.split(/:\)/);
这将返回一个数组,其中每个元素都是文本的一部分,没有:)
.
由于文本已在 each 上拆分,我们可以通过在文本的每个部分之间:)
添加 a 来构造您想要的结果::)
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('');
我建议:
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);
您可以使用此模式:
/:\)|(?:[^:]+|:(?!\)))+/g
这匹配除or之外的:)
任何一个字符或任何字符,它后面没有跟随 a 。:
:
)
以下将成功地根据需要对您提到的字符串进行分组:
your_match = your_string.match(/(:\)|[^:)]*)/g)
但是,就像您原来的 RegExp 一样,如果 a :
or)
没有出现在笑脸中,您将遇到问题。如果不在笑脸中,这些字符将从匹配组中消失。