需要一个正则表达式来查找";字符串";但不是";[string]"
Need a regex that finds "string" but not "[string]"
我正在尝试构建一个正则表达式,该表达式解析字符串并跳过括号中的内容。
类似的东西
string = "A bc defg hi [hi] jkl mnop.";
.match((应返回"hi",但不应返回[hi]。我花了5个小时复习RE,但我还是认输了。
如果重要的话,这也适用于javascript或jquery。
感谢您的帮助。此外,我正在努力使我的问题格式正确:(
编辑:
好吧,我刚刚灵光一现,发现我使用的原始RegExp确实有效。但当我用[匹配]替换匹配时,它只是替换了字符串中的第一个匹配。。。一遍又一遍。我以为这是我的正则表达式拒绝跳过括号,但在尝试了下面几乎所有的解决方案之后,我意识到我正在对Hardcore进行降级。
当.replaces发挥其魔力时,它是在第一场比赛中,所以我很简单地在结果词的末尾添加了一个空格,如下所示:
var result = string.match(regex);
var modifiedResult = '[' + result[0].toString() + ']';
string.replace(result[0].toString() + ' ', modifiedResult + ' ');
这使得它不再针对字符串中的原始单词,并停止在每次匹配时向其添加一组新的括号。谢谢大家的帮助。我要感谢这篇促使我朝着正确方向前进的帖子。
在尝试匹配RE 之前,通过删除括号之间的所有内容来预处理目标字符串
string = "A bc defg hi [hi] jkl mnop."
tmpstring = string.replace(/'[.*']/, "")
然后将您的RE应用于tmpstring
更正:根据下面的nhahtd评论,匹配括号,并使RE全局
string = "A bc defg hi [hi] jkl mnop."
tmpstring = string.replace(/'[.*?']/g, "")
您不一定需要regex。简单使用字符串操作:
var arr = string.split("[");
var final = arr[0] + arr[1].split("]")[1];
如果有多个方括号表达式,请使用循环:
while (string.indexOf("[") != -1){
var arr = string.split("[");
string = arr[0] + arr.slice(1).join("[").split("]").slice(1).join("]");
}
仅使用正则表达式,就可以使用:
hi(?!])
作为一个例子。
看看这里的负面展望:http://www.regular-expressions.info/lookaround.html遗憾的是,javascript不支持反向查找。
我曾经http://regexpal.com/要测试,abcd[hi]jkhilmnop
作为测试数据,hi(?!])
作为要查找的正则表达式。它匹配了"嗨"而没有匹配"[嗨]"。基本上,只要没有后面的"]"字符,它就会匹配"hi"。
当然,如果需要,可以进行扩展。这样做的好处是不需要对字符串进行任何预处理。
r"'[(.*)']"
如果你想使用正则表达式的话,就可以试试这个。
您想用它做什么?如果你想选择性地更换像"嗨"这样的部件,除非是"[嗨]",那么我经常使用一个系统,先匹配我想避免的内容,然后匹配我想看的内容;如果它与我想要避免的匹配,那么我返回匹配,否则我返回已处理的匹配。
像这样:
return string.replace(/('['w+'])|('w+)/g, function(all, m1, m2) {return m1 || m2.toUpperCase()});
对于给定的字符串,返回:
"A BC DEFG HI [hi] JKL MNOP."
因此:它用大写字母替换每个单词(m1为空(,除非单词位于方括号之间(m1不为空(。
这构建了一个包含在[]中的所有字符串的数组:
var regex = /'[([^']]*)']/;
var string = "A bc defg hi [hi] [jkl] mnop.";
var results=[], result;
while(result = regex.exec(string))
results.push(result[1]);
编辑
为了回答这个问题,这个正则表达式返回字符串less all is in[],并修剪空白:
"A bc defg [hi] mnop [jkl].".replace(/('s{0,1})'[[^']]*']('s{0,1})/g,'$1')
您可以尝试不同的方法,而不是跳过匹配-匹配所有内容,但不要捕获方括号(包括方括号(内的字符串,如下所示:
var r = /(?:'[.*?[^'[']]'])|(.)/g;
var result;
var str = [];
while((result = r.exec(s)) !== null){
if(result[1] !== undefined){ //true if [string] matched but not captured
str.push(result[1]);
}
}
console.log(str.join(''));
最后一行将打印字符串中与[string]
模式不匹配的部分。例如,当使用输入"A [bc] [defg] hi [hi] j[kl]u m[no]p."
进行调用时,代码会打印带有空白的"A hi ju mp."
。您可以使用此代码尝试不同的操作,例如替换等。
- 内联javascript与"<脚本>"字符串错误地关闭了脚本标记
- 用分隔符分隔具有多个整数值的字符串的Javascript"重试错误的值
- 如何删除“"使用javascript从字符串中提取字符
- 解析字符串包含'"'从mysql检索到JSON
- 为什么我得到“;错误:预期"同时访问字符串
- 传递带有符号“”的字符串变量'"到函数
- 添加前缀“#"到数组中的某些字符串值
- 索引a“/"在字符串中
- 看到意想不到的"未定义的“;在Node JS提供的字符串中
- 用“”查找字符串//"并从“//"直到最后
- 替换正斜杠“/"JavaScript字符串中的字符
- 检查字符串是否只包含“0”-"什么都没有
- 带有换行符的JSP+HTML-将其作为字符串获取,并删除"新线”;
- Regex提取字符串后的第二个“"字符串末尾的点字符
- javascript exclude"00”;以及“;01〃;字符串
- jquery ui的客户端缓存自动完成:javascript/jquery regex匹配字符串"索引“;对象
- IE下降"%"在附加html字符串时从维度
- 错误:未捕获的异常:[exception.."字符串包含一个..quot;
- jQuery:将字符串转换为"手柄;类似于Shopify's Handleize
- Regex检测到大于“>"并且小于“0”<"在字符串中