如何解决正则表达式,每个字母仅获取一个实例
| 我有一个段落,它分成多个数组,按句点分隔。我想对index [i]执行一个正则表达式,用index [i]的字符串值具有的每个字母的一个实例替换其内容。 所以; index [i]:\“这是一个句子\”将返回-> index [i]:\“ thisaenc \” 我读了这个主题。但是我不确定那是否是我要的东西。解决方法
由于我非常确定使用单个正则表达式无法满足您的需求,因此我提供了一个更通用的解决方案:
// collapseSentences(ary) will collapse each sentence in ary
// into a string containing its constituent chars
// @param {Array} the array of strings to collapse
// @return {Array} the collapsed sentences
function collapseSentences(ary){
var result=[];
ary.forEach(function(line){
var tmp={};
line.toLowerCase().split(\'\').forEach(function(c){
if(c >= \'a\' && c <= \'z\') {
tmp[c]++;
}
});
result.push(Object.keys(tmp).join(\'\'));
});
return result;
}
除了在大多数情况下不能保证保留每个句子中的字符顺序之外,该命令应该执行您想要的操作。
鉴于:
var index=[\'This is a sentence\',\'This is a test\',\'this is another test\'],result=collapseSentences(index);
结果包含:
[\"thisaenc\",\"thisae\",\"thisanoer\"]
, 不确定如何在正则表达式中执行此操作,但是这是一个非常简单的函数,无需使用正则表达式即可:
function charsInString(input) {
var output=\'\';
for(var pos=0; pos<input.length; pos++) {
char=input.charAt(pos).toLowerCase();
if(output.indexOf(char) == -1 && char != \' \') {output+=char;}
}
return output;
}
alert(charsInString(\'This is a sentence\'));
, (\\w)(?<!.*?\\1)
这会为每个正确的字符产生一个匹配项,但是就像您是从右到左阅读一样。
这将找到一个单词字符,然后向前寻找刚刚匹配的字符。
, 没关系,我设法:
justC = \"\";
if (color[i+1].match(/A/g)) {justC += \" L_A\";}
if (color[i+1].match(/B/g)) {justC += \" L_B\";}
if (color[i+1].match(/C/g)) {justC += \" L_C\";}
if (color[i+1].match(/D/g)) {justC += \" L_D\";}
if (color[i+1].match(/E/g)) {justC += \" L_E\";}
else {color[i+1] = \"L_F\";}
我的问题可能不完全是我想要的,但这是我想要的结果,供我在课堂上使用:<span class=\"L_A L_C L_E\"></span>
, 怎么样:
var re = /(.)((.*?)\\1)/g;
var str = \'This is a sentence\';
x = str.toLowerCase();
x = x.replace(/ /g,\'\');
while(x.match(re)) {
x=x.replace(re,\'$1$3\');
}
, 我不认为这可以一口气地完成。您将需要使用循环。
虽然我的示例不是用您选择的语言编写的,但似乎没有使用javascript中不存在的任何正则表达式功能。
perl -e \'$foo=\"This is a sentence\"; while ($foo =~ s/((.).*?)\\2/$1/ig) { print \"<$1><$2><$foo>\\n\"; } print \"$foo\\n\";\'
生产:
This aenc
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。