Javascript正则表达式获取子字符串,排除模式?

时间:2011-08-03 13:13:22

标签: javascript regex substring

我还是初学者:)

我需要得到一个子串,忽略[]内的最后一节(包括方括号[]),即最后忽略[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,],我不知道它会走哪条路。

由于

7 个答案:

答案 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