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

Javascript regex to get substring, excluding a pattern?

本文关键字:排除 模式 字符串 正则表达式 获取 Javascript      更新时间:2023-09-26

我还是个初学者:(

我需要得到一个忽略[](包括方括号[](内最后一个部分的子字符串,即最后忽略[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节-忽略最后的模式[something]。

但我得到了1678],1678,],我不确定它会朝哪个方向发展。

感谢

好的,这里是表达式中的问题

([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+'])$

在Regexr上看到它,完整的字符串匹配,捕获组1中的部分1和组2中的部分2。

当你现在用第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);从开始到第一个[对字符串进行剪切。

当然,这假设字符串总是采用类似的格式

var item = '1 check arranged [1678]',
    matches = item.match(/(.*)(?='['d+'])/));
alert(matches[1]);

我使用的正则表达式使用正向前瞻来排除字符串中不需要的部分。括号内的数字必须是字符串的一部分才能成功匹配,但它不会在结果中返回。

在这里,您可以找到如何删除方括号内的内容。剩下的就交给你了。:(Regex:删除方括号的内容

如果你只想在最后的中去掉[],就试试这个

var parsed = item.replace(/'s*'[[^']]*']$/,"")
var item = "1 checked arranged [1678]";
var parsed = item.replace(/'s'[.*/,"");
alert(parsed);

那项工作符合要求吗?

使用转义括号和非捕获括号:

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