我有这个字符串:
const string = `
* @body
* {
* "test": "test"
* }
* @test
* pm.test("", function() {
* });
* @example
* {
* "name": "test1",
* "status": "200 OK",
* "body": {},
* ""
* }
* @example
* {
* "name": "test2",
* "status": "400",
* "body"
* }
*
*
`;
我想检索传递的元素的内容,例如,如果我以搜索词@body
的身份通过,我将作为输出获得:
* @body
* {
* "test": "test"
* }
如果我通过@example
,我将得到输出:
* @example
* {
* "name": "test1",
* "status": "200 OK",
* "body": {},
* ""
* }
* @example
* {
* "name": "test2",
* "status": "400",
* "body"
* }
这是我正在尝试的代码:
string.match(/\@([^[@]+)/g)
这是我得到的输出:
[ '@body\n* {\n* "test": "test"\n* }\n* ',
'@test\n* pm.test("Response time is less than 200ms", function() {\n* pm.expect(pm.response.responseTime).to.be.below(500);\n* });\n* ',
'@example\n* {\n* "name": "test1",\n* "status": "200 OK",\n* "body": {},\n* ""\n* }\n* ',
'@example\n* {\n* "name": "test2",\n* "status": "400",\n* "body"\n* }\n* \n* \n' ]
但是例如当我添加@body时,一切都搞砸了。
答案 0 :(得分:3)
这里是使用正则表达式全部匹配的选项。我们可以尝试使用以下模式进行匹配:
@example[\s\S]*?(?=@|$)
这将获得所有@example
个匹配项。想法是匹配@example
后跟任意数量的内容,直到但不包括下一个@
项或字符串的末尾(以先到者为准)。< / p>
请注意,由于您的输入跨越多行,因此我使用[\s\S]*
模拟了DOT ALL行为,这是我们想要的。
var re = /@example[\s\S]*?(?=@|$)/g;
var input = "* @body\n* {\n* \"test\": \"test\"\n* }\n* @test\n* pm.test(\"\", function() {\n* });\n* @example\n* {\n* \"name\": \"test1\",\n* \"status\": \"200 OK\",\n* \"body\": {},\n* \"\"\n* }\n* @example\n* {\n* \"name\": \"test2\",\n* \"status\": \"400\",\n* \"body\"\n* }\n* \n*";
var m;
do {
m = re.exec(input);
if (m) {
console.log(m[0]);
}
} while (m);
答案 1 :(得分:1)
getStringSection
从传递给方法的part
参数生成的动态正则表达式中返回第一个匹配项。
const string = `
* @body
* {
* "test": "test"
* }
* @test
* pm.test("", function() {
* });
* @example
* {
* "name": "test1",
* "status": "200 OK",
* "body": {},
* ""
* }
* @example
* {
* "name": "test2",
* "status": "400",
* "body"
* }
*
`
const getStringSection = part => {
const reg = new RegExp(`@${part}[\\s\\w*."(),{};:]*`, 'gm')
const match = string.match(reg)
return `${string.match(reg)}`.replace('* ,', '')
}
const body = getStringSection('body')
console.log(body)
const test = getStringSection('test')
console.log(test)
const example = getStringSection('example')
console.log(example)