我正在寻找一个正则表达式来选择不在下划线字符之外的文本。
示例文字:
PartIWant_partINeedIgnored_morePartsINeedIgnored_PartIwant
基本上我需要能够选择始终在第一个下划线之前的第一个关键字和始终在最后一个下划线之后的最后一个关键字。作为一个额外的复杂性,还有一些文本根本没有下划线,这些也需要完全选择。
我得到的最好的就是这个表达:
^((?! *\_[^)]*\_ *).)*
这只是让我第一部分,而不是第二部分,它根本不支持非下划线。
这个正则表达式用于监视我们的http流量的工具,这意味着我只能“选择”我需要的部分,但不能调用函数或替换逻辑。
谢谢!
答案 0 :(得分:2)
使用JavaScript字符串函数split()
。请查看以下示例。
var t = "PartIWant_partINeedIgnored_morePartsINeedIgnored_PartIwant";
var arr = t.split('_');
console.log(arr);
//Access the required parts like this
console.log(arr[0] + ' ' + arr[arr.length - 1]);

答案 1 :(得分:1)
也许是这样的:
/(^[^_]+)|([^_]+$)/g
即匹配:
^[^_]+
字符串的开头,后跟非下划线,或[^_]+$
非下划线,后跟字符串的结尾。
var regex = /(^[^_]+)|([^_]+$)/g
console.log("A_b_c_D".match(regex)) // ["A", "D"]
console.log("A_b_D".match(regex)) // ["A", "D"]
console.log("A_D".match(regex)) // ["A", "D"]
console.log("AD".match(regex)) // ["AD"]
答案 2 :(得分:0)
我不确定你是否应该在这里使用正则表达式。我认为将字符串拆分为下划线,并使用结果数组的第一个和最后一个元素可能更快,更简单。
答案 3 :(得分:0)
.replace
:
str.replace(/_.*_/, '')
// "PartIWantPartIwant"
通过匹配,您需要选择并连接组:
parts = str.match(/^([^_]*).*?([^_]*)$/)
parts[1] + parts[2]
// "PartIWantPartIwant"
修改强>
这个正则表达式用于监视我们的http流量的工具,这意味着我只能“选择”我需要的部分,但不能调用函数或替换逻辑。
这是不可能的:正则表达式不能与不连续的跨度匹配。