我还是初学者:)
我需要得到一个子串,忽略[]
内的最后一节(包括方括号[]),即最后忽略[something inside]
部分。
注意 - 字符串中可能存在[
的其他单个出现。它们应出现在结果中。
示例
输入表格 -
1 checked arranged [1678]
期望的输出 -
1 checked arranged
我试过这个
var item = "1 checked arranged [1678]";
var parsed = item.match(/([a-zA-Z0-9\s]+)([(\[d+\])]+)$/);
|<-section 1 ->|<-section 2->|
alert(parsed);
我试图表示以下内容 -
第1部分 - 多次出现的单词(包含文字和数字),后跟空格
第2节 - 最后忽略模式[某事]。
但是我得到了1678],1678,]
,我不知道它会走哪条路。
由于
答案 0 :(得分:2)
好的,这是表达式中的问题
([a-zA-Z0-9\s]+)([(\[d+\])]+)$
问题只出在最后一部分
([(\[d+\])]+)$
^ ^
here are you creating a character class,
what you don't want because everything inside will be matched literally.
((\[d+\])+)$
^ ^^
here you create a capturing group and repeat this at least once ==> not needed
(\[d+\])$
^
here you want to match digits but forgot to escape
这将我们带到
([a-zA-Z0-9\s]+)(\[\d+\])$
见here on Regexr,匹配完整的字符串,捕获组1的第1部分和第2组的第2部分。
当你现在用第1组的内容替换整个内容时,你就完成了。
答案 1 :(得分:1)
你可以这样做
var s = "1 checked arranged [1678]";
var a = s.indexOf('[');
var b = s.substring(0,a);
alert(b);
http://jsfiddle.net/jasongennaro/ZQe6Y/1/
此s.indexOf('[');
会检查字符串中第一个[
的显示位置。
此s.substring(0,a);
会将字符串从开头剪切到第一个[
。
当然,这假设字符串总是采用类似的格式
答案 2 :(得分:1)
var item = '1 check arranged [1678]',
matches = item.match(/(.*)(?=\[\d+\])/));
alert(matches[1]);
我使用的正则表达式使用positive lookahead来排除字符串中不需要的部分。括号内的数字必须是匹配成功的字符串的一部分,但不会在结果中返回。
答案 3 :(得分:0)
在这里你可以找到如何删除方括号内的东西。剩下的就是剩下的了。 :) Regex: delete contents of square brackets
答案 4 :(得分:0)
试试这个,如果你只想在最后摆脱那个[]
var parsed = item.replace(/\s*\[[^\]]*\]$/,"")
答案 5 :(得分:0)
var item = "1 checked arranged [1678]";
var parsed = item.replace(/\s\[.*/,"");
alert(parsed);
这项工作是否符合要求?
答案 6 :(得分:0)
使用转义括号和非捕获括号:
var item = "1 checked arranged [1678]";
var parsed = item.match(/([\w\s]+)(?:\s+\[\d+\])$/);
alert(parsed[1]); //"1 checked arranged"
正则表达式的解释:
([\w\s]+) //Match alphanumeric characters and spaces
(?: //Start of non-capturing parentheses
\s* //Match leading whitespace if present, and remove it
\[ //Bracket literal
\d+ //One or more digits
\] //Bracket literal
) //End of non-capturing parentheses
$ //End of string