我有一个字符串,例如:
Lenovo K6 Power (Silver, 32 GB)(4 GB RAM), smart phone
我想删除括号,逗号等中的所有括号和内容,然后仅提取前五个单词,以便我得到结果
Lenovo K6 Power smart phone
是否有任何方法可以应用正则表达式来获得此结果?
答案 0 :(得分:2)
var myString = "Lenovo K6 Power (Silver, 32 GB)(4 GB RAM), smart phone";
while (/\(.*\)/.test(myString)) {
myString = myString.replace(/\(.*?\)/.exec(myString)[0],'');
}
console.log(myString.match(/\w+/g));
第一个片段匹配所有括号对,只要有一些并删除它们,它们匹配所有剩余的单词。
输出:Obj ... [“联想”,“K6”,“电源”,“智能”,“手机”]
这是一个通用解决方案,始终只让前5个元素将控制台日志更改为
var obj = myString.match(/\w+/g);
for (var i = 0; i < 5; i ++)
{
console.log(obj[i]);
}
答案 1 :(得分:2)
这是实现目标的一种方式:
var str = 'Lenovo K6 Power (Silver, 32 GB)(4 GB RAM)';
document.write(str.match(/\w+/g).slice(0,5).join(' '));
&#13;
它将所有单词转换为数组(match(/\w+/g)
),然后获取前五个(slice(0,5)
),然后返回到由空格(join(' ')
)分隔的字符串。< / p>
(并且......考虑到问题用正则表达式标记,我相信一个单词可以定义为由正则表达式单词字符组成,即\w
。)
修改强>
问题已经改变,所以答案不再正确。这是一个符合新条件的更新代码段:
var str = 'Lenovo K6 Power (Silver, 32 GB)(4 GB RAM), smart phone';
document.write(str.split(/(?:\W*\([^)]*\))*\W+/).slice(0,5).join(' '));
&#13;
这一个split
是字符串,而是使用正则表达式(?:\W*\([^)]*\))*\W+
,它将匹配除字词字符(\W
)之外的所有内容,除非它们在括号内(括号内的所有内容都匹配)。
split
这将给出一个只包含所需单词的数组。从逻辑来看是相同的。
答案 2 :(得分:2)
string getStringWithCharAndLength(char ch, int l)
{
string str="";
for(int i=0;i<l;i++)
str+=ch;
return str;
}
答案 3 :(得分:0)
您的问题非常简单,可以使用最基本的JavaScript技能来解答。我强烈建议你回去查看你的教程和介绍,并尝试自己解决问题。
要删除某些内容,只需执行
即可string.replace(WHAT, '')
换句话说,你用零替换东西(空字符串''
)。在你提到的情况下,这个简单的谷歌搜索“javascript remove regexp”之类的东西会给你很多指示。在这种情况下,one of the first results actually is about removing parentheses。
在你的情况下,我猜你最终决定要删除括号以及它们内部的内容。在大约学习正则表达式的前五分钟,你应该学会写
/\(.*?\)/g
^^ an actual left paren
^^^ any number of characters
^^ an actual right paren
^ match this over and over again
如果您需要帮助,请尝试在线regexp测试仪,例如regex101.com。它还将为您提供正则表达式的可读版本。
.*?
唯一适度提升的是?
,其中\(
表示“非贪婪” - 换句话说,只将角色带到下一个对吧。
我相信你已经知道为什么你必须写\
以匹配左括号,对吧? g
转义括号,因为括号本身具有regexp的特殊含义。你也知道Array
旗帜,对吧?这意味着替换所有匹配。
要查找前五个令牌,首先需要将字符串拆分为令牌。我相信你会从你的学习中回忆起基本的split
方法,包括 - 鼓声 - string.split(' ')
!用string.split(/\s+/)
拆分字符串。这将分裂在单个空间。如果要拆分任何空格,可以尝试split
。
现在回过头来仔细阅读limit
的文档,虽然我知道你已经有了。仔细查看第二个参数,称为input.replace(/\(.*?\)/g, '').split(/\s+/, 5)
。它完全符合你的要求。它分成若干段,但不超过限制。
如果您花了大约五分钟研究文档和进行实验,那么您可以轻松解决问题的解决方案
console.log('Lenovo K6 Power (Silver, 32 GB)(4 GB RAM), smart phone'.replace(/\(.*?\)/g, '').split(/\s+/, 5));
不幸的是,您在Stack Overflow上发布的方法根本无法很好地扩展。每次有一些你无法弄清楚的小问题时,你都不能在这里发帖。坦率地说,如果你不能学习如何学习,那么你最好放弃成为一名程序员并尝试铺砖。你需要学习如何自己弄清楚事物。在此之前,您需要学习如何阅读(和消化)文档。在职业生涯的早期阶段,您还需要学习如何调试程序,因为Stack Overflow不是一个调试程序的好方法,而不是首先为它编写程序。如果你根本无法自己阅读文档或自己学习,只能通过询问其他人如何做每一件小事来工作,那么找一个聊天室或论坛,哪些人没有比做这些问题更好的事情。这不是Stack Overflow的原因。
|
修复此代码以删除逗号留作练习,让您使用新发现的学习能力。提示:您可能希望使用名为“交替”的正则表达式功能,该功能由竖线或管道{{1}}表示。您可能还会发现自己需要使用字符类,这是您在regexp研究中很早就应该学到的另一件事。
这些与TypeScript或Angular没有任何关系,正如您最初发布问题时所想的那样。这有点令人担忧,你似乎认为做基本的正则表达式或字符串或数组操作会以某种方式成为TypeScript或Angular问题。 TypeScript只是JavaScript之上的输入层。 Angular是一个用于构建Web应用程序的框架。既不替换JavaScript,也不提供任何新的基本语言功能。事实上,要有效地使用,你必须更好地了解JavaScript。